Скачиваний:
1
Добавлен:
21.07.2024
Размер:
420.84 Кб
Скачать

Файл mainwindow.h:

  1. #ifndef MAINWINDOW_H  

  2. #define MAINWINDOW_H #include <QMainWindow>  

  3. namespace Ui {     class MainWindow; }  

  4. class MainWindow : public QMainWindow {     Q_OBJECT  

  5.   public:     explicit MainWindow(QWidget *parent = 0);     ~MainWindow();  

  6.   private slots:     void on_startButton_clicked();     void on_infoButton_clicked();  

  7.   private:  

  8.     Ui::MainWindow *ui;  

  9. };  

  10. #endif // MAINWINDOW_H  

Файл mainwindow.cpp:

  1. #include "mainwindow.h"  

  2. #include "abstract_paging.h"  

  3. #include "clock_paging.h"  

  4. #include "fifo_paging.h"  

  5. #include "lfu_paging.h"  

  6. #include "lru_paging.h"  

  7. #include "reverselru_paging.h"  

  8. #include "ui_mainwindow.h"  

  9. #include <QMessageBox>  

  10. #include <memory>  

  11. MainWindow::MainWindow(QWidget *parent)  

  12.     : QMainWindow(parent), ui(new Ui::MainWindow) {  

  13.     ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; }  

  14. void MainWindow::on_startButton_clicked() {  

  15.     ui->statusBar->showMessage("");     std::unique_ptr<AbstractPaging> paging;     if (ui->clockButton->isChecked()) {         paging = std::unique_ptr<AbstractPaging>(  

  16.             new ClockPaging(ui->frameCountSpin->value()));  

  17.     } else if (ui->fifoButton->isChecked()) {         paging = std::unique_ptr<AbstractPaging>(  

  18.             new FifoPaging(ui->frameCountSpin->value()));  

  19.     } else if (ui->lfuButton->isChecked()) {         paging = std::unique_ptr<AbstractPaging>(             new LfuPaging(ui->frameCountSpin->value()));  

  20.     } else if (ui->lruButton->isChecked()) {         paging = std::unique_ptr<AbstractPaging>(             new LruPaging(ui->frameCountSpin->value()));  

  21.     } else {  

  22.         paging = std::unique_ptr<AbstractPaging>(  

  23.             new ReverseLruPaging(ui->frameCountSpin->value()));  

  24.     }  

  25.     QStringList stringList = ui->referLine->text().split(QRegExp("[.,;\\s]  

  26. +"));  

  27.     ui->resultWidget->clear();     for (QString string : stringList) {  

  28.         bool isOk = true;  

  29.         int page = string.toInt(&isOk);  

  30.         if (isOk == false) {  

  31.             QMessageBox::critical(this, "Ошибка",  

  32.                                   "Ошибка при чтении ссылочной строки");             ui->resultWidget->clear();  

  33.             return;  

  34.         }  

  35.         int pageFaultCountBefore = paging->getPageFaultCount();         paging->refer(page);  

  36.         int pageFaultCountAfter = paging->getPageFaultCount();  

  37.         QString resultLine = QString::number(page) + ": ";         const std::list<int> list = paging->getList();         for (auto page : list) {  

  38.             resultLine += QString::number(page) + ", ";  

  39.         }  

  40.         resultLine.chop(2);  

  41.         if (pageFaultCountBefore != pageFaultCountAfter) {  

  42.             resultLine += " [отказ страницы]";  

  43.         }  

  44.         ui->resultWidget->addItem(resultLine);  

  45.     };  

  46.     ui->statusBar->showMessage("Число отказов страниц: " +  

  47.                                QString::number(paging->getPageFaultCount()));  

  48. }  

  49. void MainWindow::on_infoButton_clicked() {  

  50.     QMessageBox::information(this, "Информация",  

  51.                             "Программа для моделирования стратегий замещения"  

  52.                             "страниц в оперативной памяти.\nАвтор: Коваленко"  

  53.                              "Леонид (ИКПИ-85).\n");  

  54. }  

Файл main.cpp:

  1. #include "mainwindow.h" #include <QApplication>  

  2. int main(int argc, char *argv[]) {  

  3.     QApplication a(argc, argv);  

  4.     MainWindow w;  

  5.     w.show();     return a.exec();  

  6. }  

Файл mainwindow.ui:

  1. <?xml version="1.0" encoding="UTF-8"?><ui   

  2. version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property   

  3. name="geometry"><rect><x>0</x><y>0</y><width>390</width><height>370</ height></rect></property><property name="sizePolicy"><sizepolicy   

  4. hsizetype="Expanding"   

  5. vsizetype="Expanding"><horstretch>0</horstretch><verstretch>0</verstretch></  

  6. sizepolicy></property><property   

  7. name="minimumSize"><size><width>390</width><height>370</height></size></  

  8. property><property   

  9. name="maximumSize"><size><width>390</width><height>370</height></size></  

  10. property><property   

  11. name="windowTitle"><string>Моделирование</string></property><widget class="QWidget" name="centralWidget"><widget class="QListWidget" name="resultWidget"><property   

  12. name="geometry"><rect><x>10</x><y>125</y><width>370</width><height>220</ height></rect></property><property   

  13. name="editTriggers"><set>QAbstractItemView::NoEditTriggers</set></ property><property   

  14. name="defaultDropAction"><enum>Qt::IgnoreAction</enum></property></ widget><widget class="QLineEdit" name="referLine"><property name="geometry"><rect><x>200</x><y>10</y><width>180</width><height>27</ height></rect></property><property name="text"><string>1 2 3 1 2 3 1 2 3 4 5</string></property></widget><widget class="QLabel" name="label"><property name="geometry"><rect><x>10</x><y>13</y><width>180</width><height>20</ height></rect></property><property name="text"><string>Ссылочная строка:</string></property><property   

  15. name="alignment"><set>Qt::AlignCenter</set></property></widget><widget class="QRadioButton" name="fifoButton"><property   

  16. name="geometry"><rect><x>10</x><y>70</y><width>70</width><height>25</ height></rect></property><property   

  17. name="text"><string>FIFO</string></property><property name="checked"><bool>true</bool></property></widget><widget class="QRadioButton" name="reverseLRUButton"><property   

  18. name="geometry"><rect><x>80</x><y>70</y><width>121</width><height>25</  

  19. height></rect></property><property   

  20. name="text"><string>ReverseLRU</string></property></widget><widget class="QPushButton" name="startButton"><property   

  21. name="geometry"><rect><x>200</x><y>70</y><width>180</width><height>25</  

  22. height></rect></property><property   

  23. name="text"><string>Начать</string></property></widget><widget class="QLabel"   

  24. name="label_2"><property   

  25. name="geometry"><rect><x>10</x><y>43</y><width>180</width><height>20</ height></rect></property><property name="text"><string>Число страниц:</string></property><property   

  26. name="alignment"><set>Qt::AlignCenter</set></property></widget><widget class="QSpinBox" name="frameCountSpin"><property   

  27. name="geometry"><rect><x>200</x><y>40</y><width>180</width><height>27</ height></rect></property><property   

  28. name="alignment"><set>Qt::AlignCenter</set></property><property name="minimum"><number>1</number></property><property name="maximum"><number>1000</number></property><property name="singleStep"><number>1</number></property><property name="value"><number>3</number></property></widget><widget class="QRadioButton" name="clockButton"><property   

  29. name="geometry"><rect><x>10</x><y>95</y><width>70</width><height>25</ height></rect></property><property   

  30. name="text"><string>Clock</string></property><property name="checked"><bool>false</bool></property></widget><widget   

  31. class="QRadioButton" name="lfuButton"><property   

  32. name="geometry"><rect><x>140</x><y>95</y><width>60</width><height>25</  

  33. height></rect></property><property   

  34. name="text"><string>LFU</string></property></widget><widget   

  35. class="QRadioButton" name="lruButton"><property   

  36. name="geometry"><rect><x>80</x><y>95</y><width>60</width><height>25</  

  37. height></rect></property><property   

  38. name="text"><string>LRU</string></property></widget><widget   

  39. class="QPushButton" name="infoButton"><property   

  40. name="geometry"><rect><x>200</x><y>95</y><width>180</width><height>25</  

  41. height></rect></property><property   

  42. name="text"><string>Информация</string></property></widget></widget><widget class="QStatusBar" name="statusBar"/></widget><layoutdefault spacing="6" margin="11"/><resources/><connections/></ui>  

Вывод

В результате выполнения лабораторной работы:

  1. научились писать программу, моделирующую стратегии замещения страниц в оперативной памяти;

  2. закрепили свои навыки разработки в Qt.

Соседние файлы в предмете Операционные системы и среды