diff --git a/app/controller.cpp b/app/controller.cpp index 5ab495522017a66855bce223d30bb5ddee14fedd..db6a33327f15b56f6383612ec4aa493b87e4151f 100644 --- a/app/controller.cpp +++ b/app/controller.cpp @@ -1,10 +1,17 @@ #include "controller.h" #include <QDebug> +#include <QElapsedTimer> Controller::Controller(MainWindow *window) : eltCollection(), genStatus(), main(window) { 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); @@ -13,8 +20,18 @@ Controller::Controller(MainWindow *window) : eltCollection(), genStatus(), main( void Controller::update(){ //qDebug() << "timer lancé"; + + ElementsTableModel elm; + main->set_task(&elm); + + //QElapsedTimer timer; eltCollection.update(); - main->update_tasks(); + + + //timer.start(); + main->set_task(&eltCollection); + //qDebug() << "setModel : " << timer.elapsed() << "milliseconds"; + genStatus.update(); main->update_status(genStatus); //eltCollection.update(); diff --git a/app/controller.h b/app/controller.h index 4c704c7870ac14cc969fbd4894acd540b4cd17c1..4ce2c7e904f0772d90aab94dc931664cce5053f6 100644 --- a/app/controller.h +++ b/app/controller.h @@ -7,6 +7,7 @@ #include "mainwindow.h" #include <QTimer> #include <QApplication> +#include <QThread> class Controller : public QObject diff --git a/app/elementstablemodel.cpp b/app/elementstablemodel.cpp index b3519fcdff3533cc61096a3de7c267b4bf98d53c..89e4c68689df5a9b729d4bb130d06557d6ee1b62 100644 --- a/app/elementstablemodel.cpp +++ b/app/elementstablemodel.cpp @@ -1,4 +1,5 @@ #include "elementstablemodel.h" +#include <QElapsedTimer> ElementsTableModel::ElementsTableModel(QObject *parent) : QAbstractTableModel(parent), task_list(".listT") @@ -101,7 +102,7 @@ void ElementsTableModel::insertTask(Task &task, int key){ beginInsertRows(QModelIndex(), rowCount(), rowCount()); taskMap.insert(key, task); pidVector.append(key); - //qDebug() << "insert " << key << ";" + task.print(); + //qDebug() << "insert " << key << ";" + task.print(" "); endInsertRows(); } @@ -145,43 +146,74 @@ bool ElementsTableModel::removeColumns(int column, int count, const QModelIndex } + + void ElementsTableModel::update() { + //QElapsedTimer timer; + //timer.start(); system("ls /proc | grep '[0-9]' > .listT"); + //qDebug() << "write tasks list :" << timer.elapsed() << "milliseconds"; + if(!task_list.open(QIODevice::ReadOnly)) { QMessageBox::information(0, "error", task_list.errorString()); } QTextStream in(&task_list); - foreach (Task task, taskMap) { - task.setExist(false); - } + //timer.start(); + + QMap<int, Task>::iterator it; + for (it = taskMap.begin(); it != taskMap.end(); ++it) it.value().setExist(false); + + + //qDebug() << "fold map :" << timer.elapsed() << "milliseconds"; + int pid; while(!in.atEnd()) { pid = in.readLine().toInt(); + //Task* test = find(pid); + QMap<int, Task>::iterator it = taskMap.find(pid); + //Task& test = it.value(); - //int index = taskVector.indexOf(pid); - Task test = taskMap.value(pid,Task(0)); - if (test.getPID() == 0) + //qDebug() << "search in map :" << timer.elapsed() << "milliseconds"; + //qDebug() << test.print("|"); + + if (it == taskMap.end()) { + + //timer.start(); Task t(pid); - if (t.isExist()) insertTask(t, pid); + + //qDebug() << "1 task created :" << timer.elapsed() << "milliseconds"; + + if (t.isExist()) + { + //timer.start(); + insertTask(t, pid); + //qDebug() << "1 task inserted :" << timer.elapsed() << "milliseconds"; + } + } else { - //Task t = taskVector[index]; - test.update(); - if (!test.isExist()) removeTask(pid); + it->update(); - } - //model->appendRow(line); + if (!it->isExist()) + { + //timer.start(); + removeTask(pid); + //qDebug() << "1 task removed :" << timer.elapsed() << "milliseconds"; + } + } } - task_list.close(); + + usleep(10000); + } @@ -206,4 +238,3 @@ void ElementsTableModel::writeCSV(QFile file) - diff --git a/app/elementstablemodel.h b/app/elementstablemodel.h index bce3c13c2cb5238bee95674ea71b842e8f469e10..363829720e73ec694c0e234db87f2cbc1e97f316 100644 --- a/app/elementstablemodel.h +++ b/app/elementstablemodel.h @@ -1,10 +1,17 @@ #ifndef ELEMENTSTABLEMODEL_H #define ELEMENTSTABLEMODEL_H +#include <unistd.h> + #include <QAbstractTableModel> #include <task.h> #include <QDebug> #include <QFile> +//#include <updatethread.h> + +#include <QThread> +#include <QTimer> +#include <QMutex> class ElementsTableModel : public QAbstractTableModel @@ -45,6 +52,8 @@ private: QVector<int> pidVector; QFile task_list; + QMutex mutex; + }; #endif // ELEMENTSTABLEMODEL_H diff --git a/app/task.cpp b/app/task.cpp index d0bfeb6973783c2359de75cb2a1d5e0f058c12b8..23637cd924e72742e1d8af18d01894f963ecf3a4 100644 --- a/app/task.cpp +++ b/app/task.cpp @@ -1,5 +1,6 @@ #include "task.h" #include <qdebug.h> +#include <QElapsedTimer> Task::Task() : PID(0){ @@ -9,6 +10,7 @@ Task::Task(int PID) : PID(PID), utime(0), stat("/proc/"+QString::number(PID)+"/s { if (PID==0) { + exist = false; return; } QFile cmd("/proc/"+QString::number(PID)+"/comm"); @@ -92,6 +94,8 @@ bool operator ==(int pid, const Task & task) void Task::update() { + //QElapsedTimer timer; + //timer.start(); if(!stat.open(QIODevice::ReadOnly)) { exist = false; return; @@ -105,18 +109,20 @@ void Task::update() status = fields.at(2); long memTotal = 800000000000; - mem = static_cast<int>((static_cast<double>(memTotal-fields.at(22).toInt())/static_cast<double>(memTotal))*100*100.0)/100.0; + mem = static_cast<int>((static_cast<double>(fields.at(22).toInt())/static_cast<double>(memTotal))*100*100.0)/100.0; //mem = static_cast<int>(((80000000000.0-fields.at(22).toDouble())/80000000000.0)*100*100.0)/100.0; int new_utime = fields.at(13).toInt(); CPU = static_cast<double>(new_utime-utime); + //qDebug() << new_utime << "-" << utime << "=" << CPU; utime = new_utime; PPID = fields.at(3).toInt(); stat.close(); exist = true; + //qDebug() << "1 task update :" << timer.elapsed() << "milliseconds"; //qDebug() << print(); } @@ -162,7 +168,7 @@ QString Task::getUser() const return user; } -QString Task::print(QString sep=" ") const +QString Task::print(QString sep) const { int time = utime; diff --git a/app/task.h b/app/task.h index 6db14cb60928d6cf47e39154bfd4f7f550f73f00..bda43153ea9fc60b77321840a9dcd221e09b20d4 100644 --- a/app/task.h +++ b/app/task.h @@ -28,7 +28,7 @@ public: int getPPID() const; QString getUser() const; - QString print(QString) const; + QString print(QString sep = " ") const; Task & operator=(const Task &); //bool operator ==(int pid);