diff --git a/Foundation/include/Poco/Thread_WINCE.h b/Foundation/include/Poco/Thread_WINCE.h index 013cfa460..9e40f15ab 100644 --- a/Foundation/include/Poco/Thread_WINCE.h +++ b/Foundation/include/Poco/Thread_WINCE.h @@ -22,6 +22,7 @@ #include "Poco/Foundation.h" #include "Poco/Runnable.h" +#include "Poco/SharedPtr.h" #include "Poco/UnWindows.h" @@ -40,16 +41,6 @@ public: typedef void (*Callable)(void*); typedef DWORD (WINAPI *Entry)(LPVOID); - struct CallbackData - { - CallbackData(): callback(0), pData(0) - { - } - - Callable callback; - void* pData; - }; - enum Priority { PRIO_LOWEST_IMPL = THREAD_PRIORITY_LOWEST, @@ -76,9 +67,7 @@ public: static int getMaxOSPriorityImpl(int policy); void setStackSizeImpl(int size); int getStackSizeImpl() const; - void startImpl(Runnable& target); - void startImpl(Callable target, void* pData = 0); - + void startImpl(SharedPtr pTarget); void joinImpl(); bool joinImpl(long milliseconds); bool isRunningImpl() const; @@ -89,7 +78,6 @@ public: protected: static DWORD WINAPI runnableEntry(LPVOID pThread); - static DWORD WINAPI callableEntry(LPVOID pThread); void createImpl(Entry ent, void* pData); void threadCleanup(); @@ -120,8 +108,7 @@ private: DWORD _slot; }; - Runnable* _pRunnableTarget; - CallbackData _callbackTarget; + SharedPtr _pRunnableTarget; HANDLE _thread; DWORD _threadId; int _prio; diff --git a/Foundation/src/Thread_WINCE.cpp b/Foundation/src/Thread_WINCE.cpp index 803c38010..ea8b3de4e 100644 --- a/Foundation/src/Thread_WINCE.cpp +++ b/Foundation/src/Thread_WINCE.cpp @@ -61,29 +61,17 @@ void ThreadImpl::setOSPriorityImpl(int prio, int /* policy */) } -void ThreadImpl::startImpl(Runnable& target) +void ThreadImpl::startImpl(SharedPtr pTarget) { if (isRunningImpl()) throw SystemException("thread already running"); - _pRunnableTarget = ⌖ + _pRunnableTarget = pTarget; createImpl(runnableEntry, this); } -void ThreadImpl::startImpl(Callable target, void* pData) -{ - if (isRunningImpl()) - throw SystemException("thread already running"); - - _callbackTarget.callback = target; - _callbackTarget.pData = pData; - - createImpl(callableEntry, this); -} - - void ThreadImpl::createImpl(Entry ent, void* pData) { _thread = CreateThread(NULL, _stackSize, ent, pData, 0, &_threadId); @@ -180,28 +168,4 @@ DWORD WINAPI ThreadImpl::runnableEntry(LPVOID pThread) } -DWORD WINAPI ThreadImpl::callableEntry(LPVOID pThread) -{ - _currentThreadHolder.set(reinterpret_cast(pThread)); - try - { - ThreadImpl* pTI = reinterpret_cast(pThread); - pTI->_callbackTarget.callback(pTI->_callbackTarget.pData); - } - catch (Exception& exc) - { - ErrorHandler::handle(exc); - } - catch (std::exception& exc) - { - ErrorHandler::handle(exc); - } - catch (...) - { - ErrorHandler::handle(); - } - return 0; -} - - } // namespace Poco