--- /dev/null
+#include "../../include/pthreadwrapper/threadedexecutor.h"\r
+\r
+#ifdef XMEM\r
+ #include <xmem.h>\r
+#endif\r
+\r
+namespace PThread\r
+{\r
+\r
+ThreadedExecutor::~ThreadedExecutor()\r
+{\r
+ for(std::vector<Thread *>::iterator i=m_threads.begin(); i!=m_threads.end(); i++)\r
+ {\r
+ (*i)->Cancel();\r
+ (*i)->Join();\r
+ delete (*i);\r
+ }\r
+}\r
+\r
+void ThreadedExecutor::Cancel()\r
+{\r
+ for(std::vector<Thread *>::iterator i=m_threads.begin(); i!=m_threads.end(); i++)\r
+ {\r
+ (*i)->Cancel(); \r
+ }\r
+}\r
+\r
+void ThreadedExecutor::CleanupFinished()\r
+{\r
+ for(std::vector<Thread *>::iterator i=m_threads.begin(); i!=m_threads.end(); )\r
+ {\r
+ if((*i)->IsRunning()==false)\r
+ {\r
+ delete (*i);\r
+ i=m_threads.erase(i);\r
+ }\r
+ else\r
+ {\r
+ i++;\r
+ }\r
+ }\r
+}\r
+\r
+void ThreadedExecutor::Execute(Runnable *runnable)\r
+{\r
+ CleanupFinished();\r
+ m_threads.push_back(new Thread(runnable)); \r
+}\r
+\r
+void ThreadedExecutor::Join()\r
+{\r
+ for(std::vector<Thread *>::iterator i=m_threads.begin(); i!=m_threads.end(); i++)\r
+ {\r
+ (*i)->Join();\r
+ }\r
+ CleanupFinished();\r
+}\r
+\r
+} // namespace\r