version 0.3.0
[fms.git] / src / threadwrapper / threadedexector.cpp
1 #include "../../include/threadwrapper/threadedexecutor.h"\r
2 \r
3 ThreadedExecutor::~ThreadedExecutor()\r
4 {\r
5         for(std::vector<CancelableThread *>::iterator i=m_threads.begin(); i!=m_threads.end(); i++)\r
6         {\r
7                 (*i)->Cancel();\r
8                 (*i)->join();\r
9                 delete (*i);\r
10         }\r
11 }\r
12 \r
13 void ThreadedExecutor::Cancel()\r
14 {\r
15         for(std::vector<CancelableThread *>::iterator i=m_threads.begin(); i!=m_threads.end(); i++)\r
16         {\r
17                 if((*i)->isRunning())\r
18                 {\r
19                         (*i)->Cancel();\r
20                 }\r
21         }\r
22 }\r
23 \r
24 void ThreadedExecutor::CleanupCompleted()\r
25 {\r
26         for(std::vector<CancelableThread *>::iterator i=m_threads.begin(); i!=m_threads.end(); )\r
27         {\r
28                 if((*i)->isRunning()==false)\r
29                 {\r
30                         delete (*i);\r
31                         i=m_threads.erase(i);\r
32                 }\r
33                 else\r
34                 {\r
35                         i++;\r
36                 }\r
37         }\r
38 }\r
39 \r
40 void ThreadedExecutor::Join()\r
41 {\r
42         for(std::vector<CancelableThread *>::iterator i=m_threads.begin(); i!=m_threads.end(); i++)\r
43         {\r
44                 (*i)->join();\r
45         }\r
46         CleanupCompleted();\r
47 }\r
48 \r
49 void ThreadedExecutor::Start(CancelableRunnable *runnable)\r
50 {\r
51         m_threads.push_back(new CancelableThread(runnable));\r
52         CleanupCompleted();\r
53 }\r