diff --git a/app/controller.cpp b/app/controller.cpp
index b36de2b9220e6e55eddcf2890698ebd566cdc255..57d32c3e684cccc4e3355079e1f0cb7bf21fa7ce 100644
--- a/app/controller.cpp
+++ b/app/controller.cpp
@@ -3,18 +3,19 @@
 
 Controller::Controller(MainWindow *window) : eltCollection(), genStatus(), main(window)
 {
-
+    eltCollection.insertColumns(0,8);
+    main->update_tasks(&eltCollection);
     QTimer *timer = new QTimer();
     timer->connect(timer, SIGNAL(timeout()), this , SLOT(update()));
-    timer->start(1000);
+    timer->start(5000);
 
 }
 
 void Controller::update(){
     //qDebug() << "timer lancé";
-    //eltCollection.update();
+    eltCollection.update();
     genStatus.update();
     main->update_status(genStatus);
     //eltCollection.update();
-    //main->update_tasks(&eltCollection);
+    //
 }
diff --git a/app/controller.h b/app/controller.h
index 61ebcd5b4979b14c7e62c0b765c78e2809b19eda..4c704c7870ac14cc969fbd4894acd540b4cd17c1 100644
--- a/app/controller.h
+++ b/app/controller.h
@@ -2,6 +2,7 @@
 #define CONTROLLER_H
 
 #include "elementslistmodel.h"
+#include "elementstablemodel.h"
 #include "generalstatus.h"
 #include "mainwindow.h"
 #include <QTimer>
@@ -21,7 +22,7 @@ public slots :
 
 private :
     MainWindow *main;
-    ElementsListModel eltCollection;
+    ElementsTableModel eltCollection;
     GeneralStatus genStatus;
 };
 
diff --git a/app/elementstablemodel.cpp b/app/elementstablemodel.cpp
index 8a81ffed8878a670c44c535291b6720c0cd79573..f40c2cd78e82c5e4261d52ee55e129c2e551e6b1 100644
--- a/app/elementstablemodel.cpp
+++ b/app/elementstablemodel.cpp
@@ -62,28 +62,30 @@ QVariant ElementsTableModel::data(const QModelIndex &index, int role) const
 
          int row = index.row();
          int col = index.column();
-         QMap<int, Task*>::const_iterator it = taskMap.cbegin();
-         it += row;
-         Task * task = it.value();
+         //QMap<int, Task*>::const_iterator it = taskMap.cbegin();
+         //it += row;
+         //Task * task = it.value();
 
+         int pid = pidVector.at(row);
+         Task task = taskMap.value(pid);
 
          switch (col) {
          case 0:
-             return QVariant(task->getPID());
+             return QVariant(task.getPID());
          case 1:
-             return QVariant(task->getPID());
+             return QVariant(task.get_name());
          case 2:
-             return QVariant(task->getPID());
+             return QVariant(task.get_status());
          case 3:
-             return QVariant(task->getPPID());
+             return QVariant(task.getPPID());
          case 4:
-             return QVariant(task->getPID());
+             return QVariant(task.getUser());
          case 5:
-             return QVariant(task->getCPU());
+             return QVariant(QString::number(task.getCPU())+"%");
          case 6:
-             return QVariant(task->getMem());
+             return QVariant(QString::number(task.getMem())+"%");
          case 7:
-             return QVariant(task->getUtime());
+             return QVariant(task.getUtime_s());
 
          default:
              break;
@@ -95,17 +97,20 @@ QVariant ElementsTableModel::data(const QModelIndex &index, int role) const
 
 
 
-void ElementsTableModel::insertTask(Task *task, int key){
-    beginInsertRows(QModelIndex(), 0, 0);
+void ElementsTableModel::insertTask(Task &task, int key){
+    beginInsertRows(QModelIndex(), rowCount(), rowCount());
     taskMap.insert(key, task);
-    //qDebug() << "insert " + task.print() +" at " << row;
+    pidVector.append(key);
+    //qDebug() << "insert " << key << ";" + task.print();
     endInsertRows();
 }
 
 void ElementsTableModel::removeTask(int key){
-    beginRemoveRows(QModelIndex(), 0, 0);
+    int row = pidVector.indexOf(key);
+    beginRemoveRows(QModelIndex(), row, row);
     taskMap.remove(key);
-    //qDebug() << "remove at " << row;
+    pidVector.remove(row);
+    //qDebug() << "remove " << key;
     endRemoveRows();
 }
 
@@ -138,3 +143,52 @@ bool ElementsTableModel::removeColumns(int column, int count, const QModelIndex
     // FIXME: Implement me!
     endRemoveColumns();
 }
+
+
+void ElementsTableModel::update()
+{
+    system("ls /proc | grep '[0-9]' > .listT");
+    if(!task_list.open(QIODevice::ReadOnly)) {
+        QMessageBox::information(0, "error", task_list.errorString());
+    }
+    QTextStream in(&task_list);
+
+    foreach (Task task, taskMap) {
+        task.setExist(false);
+    }
+
+    int pid;
+    while(!in.atEnd()) {
+        pid = in.readLine().toInt();
+
+
+        //int index = taskVector.indexOf(pid);
+        Task test = taskMap.value(pid,Task(0));
+        if (test.getPID() == 0)
+        {
+            Task t(pid);
+            if (t.isExist()) insertTask(t, pid);
+        }
+        else
+        {
+            //Task t = taskVector[index];
+            test.update();
+            if (!test.isExist()) removeTask(pid);
+
+        }
+
+        //model->appendRow(line);
+    }
+
+
+    task_list.close();
+}
+
+
+
+
+
+
+
+
+
diff --git a/app/elementstablemodel.h b/app/elementstablemodel.h
index 0160655e10d996722dd08e676dccab38a5d27c75..1b5147cb417dcfdc8e4cf970b79bfd0672942d11 100644
--- a/app/elementstablemodel.h
+++ b/app/elementstablemodel.h
@@ -3,6 +3,7 @@
 
 #include <QAbstractTableModel>
 #include <task.h>
+#include <QDebug>
 
 
 class ElementsTableModel : public QAbstractTableModel
@@ -12,6 +13,8 @@ class ElementsTableModel : public QAbstractTableModel
 public:
     explicit ElementsTableModel(QObject *parent = nullptr);
 
+    void update();
+
     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
 
 
@@ -21,7 +24,7 @@ public:
 
     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
 
-    void insertTask(Task *task, int key);
+    void insertTask(Task &task, int key);
     void removeTask(int key);
 
 
@@ -35,7 +38,8 @@ public:
 
 private:
 
-    QMap<int, Task*> taskMap;
+    QMap<int, Task> taskMap;
+    QVector<int> pidVector;
     QFile task_list;
 
 };
diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp
index d70b6d8381a226b703426b7339ba53e3157c1a0f..7cf0fa49c72edddfdaf2fbe1a5c77ca3386d471d 100644
--- a/app/mainwindow.cpp
+++ b/app/mainwindow.cpp
@@ -15,13 +15,13 @@ MainWindow::MainWindow(QWidget *parent) :
 
 
 
-    Task t(1);
-    ElementsTableModel * model = new ElementsTableModel();
-    model->insertColumns(0,8);
-    model->insertTask(&t, 1);
+    //Task t(1);
+    //ElementsTableModel * model = new ElementsTableModel();
+    //model->insertColumns(0,8);
+    //model->insertTask(t, 1);
     //model->insertTask(t, 1);
     //ui->listView->setModel(model);
-    ui->tableView->setModel(model);
+    //ui->tableView->setModel(model);
 
 
 }
@@ -52,9 +52,9 @@ void MainWindow::update_status(GeneralStatus &genStatus)
 
 }
 
-void MainWindow::update_tasks(ElementsListModel * eltCollection)
+void MainWindow::update_tasks(ElementsTableModel * eltCollection)
 {
-    //ui->listView->setModel(eltCollection);
+    ui->tableView->setModel(eltCollection);
 }
 
 void MainWindow::on_comboBox_currentTextChanged(const QString &arg1)
diff --git a/app/mainwindow.h b/app/mainwindow.h
index 8a49953edd32d54b0f0674ac608f2393e0e04c15..2c59fcb2bac991439bac7fbc57cd4b45b677e66d 100644
--- a/app/mainwindow.h
+++ b/app/mainwindow.h
@@ -21,7 +21,7 @@ public:
     explicit MainWindow(QWidget *parent = 0);
     ~MainWindow();
     void update_status(GeneralStatus &genStatus);
-    void update_tasks(ElementsListModel* eltCollection);
+    void update_tasks(ElementsTableModel* eltCollection);
 
 private slots:
     void on_comboBox_currentTextChanged(const QString &arg1);
diff --git a/app/task.cpp b/app/task.cpp
index 6047c1927c11b6f148ecc9f07866754effdb4ab0..90bdab9fa58272104f0a74979356aa12d52082fc 100644
--- a/app/task.cpp
+++ b/app/task.cpp
@@ -7,6 +7,10 @@ Task::Task() : PID(0){
 
 Task::Task(int PID) : PID(PID), utime(0), stat("/proc/"+QString::number(PID)+"/stat"), exist(true)
 {
+    if (PID==0)
+    {
+        return;
+    }
     QFile cmd("/proc/"+QString::number(PID)+"/comm");
     if(!cmd.open(QIODevice::ReadOnly)) {
         exist = false;
@@ -133,6 +137,18 @@ int Task::getUtime() const
 {
     return utime;
 }
+QString Task::getUtime_s() const
+{
+    int time = utime;
+    int j = time/86400;
+    time-=j*86400;
+    int h = time/3600;
+    time-=h*3600;
+    int m = time/60;
+    int s = time - m*60;
+
+    return QString::number(j)+ ":" + QString::number(h) + ":" + QString::number(m) + ":" + QString::number(s);
+}
 double Task::getMem() const
 {
     return mem;
diff --git a/app/task.h b/app/task.h
index 4da5cd6d4638039034758cdc445ceddc90e66669..dd475714860c6f61519a79f9915fb55cc0491c69 100644
--- a/app/task.h
+++ b/app/task.h
@@ -23,6 +23,7 @@ public:
     int getPID() const;
     double getCPU() const;
     int getUtime() const;
+    QString getUtime_s() const;
     double getMem() const;
     int getPPID() const;
     QString getUser() const;