From 049b4e09fe3d0cdabb7f7d7c56aa38fb4dc15ed9 Mon Sep 17 00:00:00 2001 From: Michael Glassford Date: Tue, 6 Jul 2004 17:28:24 +0000 Subject: [PATCH] Changes for WinCE. [SVN r23378] --- src/thread.cpp | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/thread.cpp b/src/thread.cpp index e66408bf..2ae8839e 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -18,7 +18,9 @@ #if defined(BOOST_HAS_WINTHREADS) # include -# include +# if !defined(BOOST_NO_THREADEX) +# include +# endif #elif defined(BOOST_HAS_MPTASKS) # include @@ -31,6 +33,37 @@ namespace { +#if defined(BOOST_HAS_WINTHREADS) && defined(BOOST_NO_THREADEX) +// Windows CE doesn't define _beginthreadex + +struct ThreadProxyData +{ + typedef unsigned (__stdcall* func)(void*); + func start_address_; + void* arglist_; + ThreadProxyData(func start_address,void* arglist) : start_address_(start_address), arglist_(arglist) {} +}; + +DWORD WINAPI ThreadProxy(LPVOID args) +{ + ThreadProxyData* data=reinterpret_cast(args); + DWORD ret=data->start_address_(data->arglist_); + delete data; + return ret; +} + +inline unsigned _beginthreadex(void* security, unsigned stack_size, unsigned (__stdcall* start_address)(void*), +void* arglist, unsigned initflag,unsigned* thrdaddr) +{ + DWORD threadID; + HANDLE hthread=CreateThread(static_cast(security),stack_size,ThreadProxy, + new ThreadProxyData(start_address,arglist),initflag,&threadID); + if (hthread!=0) + *thrdaddr=threadID; + return reinterpret_cast(hthread); +} +#endif + class thread_param { public: