version 0.3.0
[fms.git] / include / threadwrapper / cancelablethread.h
diff --git a/include/threadwrapper/cancelablethread.h b/include/threadwrapper/cancelablethread.h
new file mode 100644 (file)
index 0000000..6c7266f
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _cancelablethread_\r
+#define _cancelablethread_\r
+\r
+#include "cancelablerunnable.h"\r
+\r
+#include <Poco/Thread.h>\r
+\r
+class CancelableThread:public Poco::Thread\r
+{\r
+public:\r
+       CancelableThread():m_runnable(0)                                                                                {}\r
+       CancelableThread(CancelableRunnable *runnable):m_runnable(runnable)     { start(*runnable); }\r
+       ~CancelableThread()\r
+       {\r
+               if(m_runnable)\r
+               {\r
+                       delete m_runnable;\r
+               }\r
+       }\r
+\r
+       // CancelableThread takes ownership of runnable and will destroy it in the destructor\r
+       void Start(CancelableRunnable *runnable)        { m_runnable=runnable; start(*runnable); }\r
+\r
+       void Cancel()                           { if(m_runnable) { m_runnable->Cancel(); } }\r
+       const bool IsCancelled()        { return m_runnable ? m_runnable->IsCancelled() : false; }\r
+\r
+private:\r
+\r
+       CancelableRunnable *m_runnable;\r
+\r
+};\r
+\r
+#endif // _cancelablethread_\r