diff --git a/app/controller.cpp b/app/controller.cpp index db6a33327f15b56f6383612ec4aa493b87e4151f..7c4b9d4e02488601e9b403bed6c5301c310506fb 100644 --- a/app/controller.cpp +++ b/app/controller.cpp @@ -7,14 +7,12 @@ Controller::Controller(MainWindow *window) : eltCollection(), genStatus(), main( eltCollection.insertColumns(0,8); //QThread* thread = QThread::create([this]{ eltCollection.update();}); //thread->start(); - //QElapsedTimer t; - //t.start(); + main->set_task(&eltCollection); - //qDebug() << "setModel : " << t.elapsed() << "milliseconds"; QTimer *timer = new QTimer(); timer->connect(timer, SIGNAL(timeout()), this , SLOT(update())); - timer->start(5000); + timer->start(1000); } @@ -25,8 +23,9 @@ void Controller::update(){ main->set_task(&elm); //QElapsedTimer timer; + //timer.start(); eltCollection.update(); - + //qDebug() << "update : " << timer.elapsed() << "milliseconds"; //timer.start(); main->set_task(&eltCollection); diff --git a/app/elementstablemodel.cpp b/app/elementstablemodel.cpp index 89e4c68689df5a9b729d4bb130d06557d6ee1b62..37af6b9e2ce646baab714b6a455ed65da41f2f71 100644 --- a/app/elementstablemodel.cpp +++ b/app/elementstablemodel.cpp @@ -38,7 +38,7 @@ int ElementsTableModel::rowCount(const QModelIndex &parent) const if (parent.isValid()) return 0; - return taskMap.size(); + return taskVector.size(); // FIXME: Implement me! } @@ -67,26 +67,29 @@ QVariant ElementsTableModel::data(const QModelIndex &index, int role) const //it += row; //Task * task = it.value(); - int pid = pidVector.at(row); - Task task = taskMap.value(pid); + //int pid = pidVector.at(row); + //Task task = taskMap.value(pid); + + Task* task = taskVector.value(row); + //qDebug() << task->print(" "); switch (col) { case 0: - return QVariant(task.getPID()); + return QVariant(task->getPID()); case 1: - return QVariant(task.get_name()); + return QVariant(task->get_name()); case 2: - return QVariant(task.get_status()); + return QVariant(task->get_status()); case 3: - return QVariant(task.getPPID()); + return QVariant(task->getPPID()); case 4: - return QVariant(task.getUser()); + return QVariant(task->getUser()); case 5: - return QVariant(QString::number(task.getCPU())+"%"); + return QVariant(QString::number(task->getCPU())+"%"); case 6: - return QVariant(QString::number(task.getMem())+"%"); + return QVariant(QString::number(task->getMem())+"%"); case 7: - return QVariant(task.getUtime_s()); + return QVariant(task->getUtime_s()); default: break; @@ -98,20 +101,20 @@ QVariant ElementsTableModel::data(const QModelIndex &index, int role) const -void ElementsTableModel::insertTask(Task &task, int key){ +void ElementsTableModel::insertTask(Task* task){ beginInsertRows(QModelIndex(), rowCount(), rowCount()); - taskMap.insert(key, task); - pidVector.append(key); - //qDebug() << "insert " << key << ";" + task.print(" "); + taskVector.append(task); + //pidVector.append(key); + //qDebug() << "insert " << task->print(" "); endInsertRows(); } -void ElementsTableModel::removeTask(int key){ - int row = pidVector.indexOf(key); - beginRemoveRows(QModelIndex(), row, row); - taskMap.remove(key); - pidVector.remove(row); - //qDebug() << "remove " << key; +void ElementsTableModel::removeTask(Task* task){ + //int row = pidVector.indexOf(key); + beginRemoveRows(QModelIndex(), rowCount(), rowCount()); + taskVector.removeOne(task); + //pidVector.remove(row); + //qDebug() << "remove " << task->print(); endRemoveRows(); } @@ -150,7 +153,7 @@ bool ElementsTableModel::removeColumns(int column, int count, const QModelIndex void ElementsTableModel::update() { - //QElapsedTimer timer; + QElapsedTimer timer; //timer.start(); system("ls /proc | grep '[0-9]' > .listT"); //qDebug() << "write tasks list :" << timer.elapsed() << "milliseconds"; @@ -160,54 +163,63 @@ void ElementsTableModel::update() } QTextStream in(&task_list); - //timer.start(); + timer.start(); - QMap<int, Task>::iterator it; - for (it = taskMap.begin(); it != taskMap.end(); ++it) it.value().setExist(false); + //QVector<Task*>::iterator it; + for (int i =0; i < taskVector.size(); ++i) + { + taskVector.value(i)->setExist(false); + } //qDebug() << "fold map :" << timer.elapsed() << "milliseconds"; int pid; + int i; + bool stop; while(!in.atEnd()) { pid = in.readLine().toInt(); + //qDebug() << pid; //Task* test = find(pid); - QMap<int, Task>::iterator it = taskMap.find(pid); + //QMap<int, Task>::iterator it = taskMap.find(pid); //Task& test = it.value(); - //qDebug() << "search in map :" << timer.elapsed() << "milliseconds"; - //qDebug() << test.print("|"); - - if (it == taskMap.end()) + //QVector<Task*>::iterator it; + i = 0; + stop = false; + while (!stop && i < taskVector.size()) { - - //timer.start(); - Task t(pid); - - //qDebug() << "1 task created :" << timer.elapsed() << "milliseconds"; - - if (t.isExist()) + Task* temp = taskVector.value(i); + if (temp->getPID() == pid) { - //timer.start(); - insertTask(t, pid); - //qDebug() << "1 task inserted :" << timer.elapsed() << "milliseconds"; + temp->update(); + if (!temp->isExist()) + { + //timer.start(); + removeTask(temp); + //qDebug() << "1 task removed :" << timer.elapsed() << "milliseconds"; + } + stop = true; } - + ++i; } - else + if (!stop) { - it->update(); - - - if (!it->isExist()) + Task* t = new Task(pid); + if (t->isExist()) { //timer.start(); - removeTask(pid); - //qDebug() << "1 task removed :" << timer.elapsed() << "milliseconds"; + insertTask(t); + //qDebug() << "1 task inserted :" << timer.elapsed() << "milliseconds"; } } + + //qDebug() << "search in map :" << timer.elapsed() << "milliseconds"; + //qDebug() << test.print("|"); + + } task_list.close(); @@ -223,8 +235,8 @@ void ElementsTableModel::writeCSV(QFile file) { QTextStream stream( &file ); stream << "PID , name , status , PPID , user , CPU , memory , uptime" << endl; - foreach (Task t, taskMap) { - stream << t.print(" , ") << endl; + foreach (Task* t, taskVector) { + stream << t->print(" , ") << endl; } //for (QMap<int, Task>::const_iterator it = taskMap.cbegin() ; taskMap.cend() ; ++it) diff --git a/app/elementstablemodel.h b/app/elementstablemodel.h index 363829720e73ec694c0e234db87f2cbc1e97f316..26952dd704ca4304331403be045b50c37ae2664a 100644 --- a/app/elementstablemodel.h +++ b/app/elementstablemodel.h @@ -32,8 +32,8 @@ public: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - void insertTask(Task &task, int key); - void removeTask(int key); + void insertTask(Task* task); + void removeTask(Task* task); // Add data: @@ -48,8 +48,8 @@ public: private: - QMap<int, Task> taskMap; - QVector<int> pidVector; + //QMap<int, Task> taskMap; + QVector<Task*> taskVector; QFile task_list; QMutex mutex;