--- /dev/null
+#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