/[projects]/smsdaemon/TaskManager.cpp
ViewVC logotype

Annotation of /smsdaemon/TaskManager.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 104 - (hide annotations) (download)
Tue Jun 17 08:14:12 2008 UTC (15 years, 11 months ago) by torben
File size: 2021 byte(s)
Make taskmanager print the names of the loaded tasks

1 torben 26
2     #include "TaskManager.h"
3    
4     #include "common.h"
5    
6 torben 82 #include <time.h>
7 torben 26
8     TaskManager::TaskManager()
9 torben 82 : _lastExecuted(0)
10 torben 26 {
11     }
12    
13     TaskManager::~TaskManager()
14 torben 96 {
15     //delete any temporary tasks still in the list
16     std::list<Task*>::iterator it;
17     for (it = _temp_tasks.begin(); it != _temp_tasks.end(); ++it)
18     {
19     delete (*it);
20     }
21 torben 26 }
22    
23    
24     void TaskManager::LoadTasks()
25     {
26    
27 torben 104 //print the loaded tasks
28     std::map<std::string, Task*>::iterator it;
29     for(it = _tasks.begin(); it != _tasks.end(); ++it)
30     {
31     Task* tsk = (*it).second;
32     if (tsk != 0)
33     Common::instance()->logMessage( std::string("Loaded task \"") + tsk->GetName() + "\"" );
34     }
35 torben 26 }
36    
37 torben 82
38 torben 96 void TaskManager::AddTask(Task* task)
39 torben 82 {
40 torben 96 Common* cmn = Common::instance();
41 torben 82
42 torben 96 if (task != 0)
43 torben 82 {
44 torben 96 std::string name = task->GetName();
45 torben 82
46 torben 96 if ( _tasks[ name ] == 0)
47     _tasks[ name ] = task;
48     else
49     cmn->logMessage( std::string("AddTask() -- already have a task called ") + name);
50 torben 82 }
51 torben 96 else
52     {
53     cmn->logMessage("AddTask() -- cannot register a null pointer");
54     }
55 torben 82 }
56    
57 torben 96 void TaskManager::AddTemporaryTask(Task* task)
58 torben 26 {
59 torben 96 _temp_tasks.push_back(task);
60 torben 26 }
61    
62    
63 torben 96 void TaskManager::ExecuteTasks(IGsmModem& modem)
64 torben 26 {
65 torben 96 const int SLEEP_TIME = 10; //wait at least 10 seconds between executions
66     int now = time(0);
67 torben 26
68 torben 96 if (now < (_lastExecuted + SLEEP_TIME) )
69     return;
70    
71     _lastExecuted = now;
72    
73     //execute real tasks
74    
75     std::map<std::string, Task*>::iterator m_it;
76    
77     for (m_it = _tasks.begin(); m_it != _tasks.end(); ++m_it)
78 torben 26 {
79 torben 96 Task* tsk = (*m_it).second;
80     tsk->ExecuteTask(modem);
81 torben 26 }
82    
83 torben 96 //execute temporary tasks
84 torben 26
85 torben 96 std::list<Task*>::iterator l_it;
86     for (l_it = _temp_tasks.begin(); l_it != _temp_tasks.end(); ++l_it)
87     {
88     Task* tsk = (*l_it);
89     tsk->ExecuteTask(modem);
90    
91     if ( tsk->IsFinished() )
92     {
93     delete tsk;
94     l_it = _temp_tasks.erase(l_it);
95    
96     //now l_it points to the next element in the list,
97     //but since the for() loop will increment it before next iteration we will decrease it here
98     --l_it;
99     }
100     }
101    
102    
103 torben 26 }
104    
105    
106 torben 96 Task* TaskManager::GetTask(const std::string& taskname)
107     {
108     return _tasks[ taskname ];
109     }

  ViewVC Help
Powered by ViewVC 1.1.20