version 0.1.9
[fms.git] / src / pthreadwrapper / threadedexecutor.cpp
1 #include "../../include/pthreadwrapper/threadedexecutor.h"\r
2 \r
3 #ifdef XMEM\r
4         #include <xmem.h>\r
5 #endif\r
6 \r
7 namespace PThread\r
8 {\r
9 \r
10 ThreadedExecutor::~ThreadedExecutor()\r
11 {\r
12         for(std::vector<Thread *>::iterator i=m_threads.begin(); i!=m_threads.end(); i++)\r
13         {\r
14                 (*i)->Cancel();\r
15                 (*i)->Join();\r
16                 delete (*i);\r
17         }\r
18 }\r
19 \r
20 void ThreadedExecutor::Cancel()\r
21 {\r
22         for(std::vector<Thread *>::iterator i=m_threads.begin(); i!=m_threads.end(); i++)\r
23         {\r
24                 (*i)->Cancel(); \r
25         }\r
26 }\r
27 \r
28 void ThreadedExecutor::CleanupFinished()\r
29 {\r
30         for(std::vector<Thread *>::iterator i=m_threads.begin(); i!=m_threads.end(); )\r
31         {\r
32                 if((*i)->IsRunning()==false)\r
33                 {\r
34                         delete (*i);\r
35                         i=m_threads.erase(i);\r
36                 }\r
37                 else\r
38                 {\r
39                         i++;\r
40                 }\r
41         }\r
42 }\r
43 \r
44 void ThreadedExecutor::Execute(Runnable *runnable)\r
45 {\r
46         CleanupFinished();\r
47         m_threads.push_back(new Thread(runnable));      \r
48 }\r
49 \r
50 void ThreadedExecutor::Join()\r
51 {\r
52         for(std::vector<Thread *>::iterator     i=m_threads.begin(); i!=m_threads.end(); i++)\r
53         {\r
54                 (*i)->Join();\r
55         }\r
56         CleanupFinished();\r
57 }\r
58 \r
59 }       // namespace\r