Ticket #8817: thread.cpp.patch

File thread.cpp.patch, 2.4 KB (added by Andrew Ho <helloworld922@…>, 9 years ago)

patch for libs\thread\src\win32\thread.cpp

  • thread.cpp

    -------------------------------------------------------------------
    thread: Windows CD _threadex handling code breaks mingw w64
    compilation.
    This should be a better way to accomplish the same code, and
    make it only applicable when targeting Windows CE.
    -------------------------------------------------------------------
     
    110110    }
    111111    namespace
    112112    {
    113 #ifndef BOOST_HAS_THREADEX
    114 // Windows CE doesn't define _beginthreadex
    115 
    116         struct ThreadProxyData
    117         {
    118             typedef unsigned (__stdcall* func)(void*);
    119             func start_address_;
    120             void* arglist_;
    121             ThreadProxyData(func start_address,void* arglist) : start_address_(start_address), arglist_(arglist) {}
    122         };
    123 
    124         DWORD WINAPI ThreadProxy(LPVOID args)
    125         {
    126             std::auto_ptr<ThreadProxyData> data(reinterpret_cast<ThreadProxyData*>(args));
    127             DWORD ret=data->start_address_(data->arglist_);
    128             return ret;
     113#if defined (_WIN32_WCE)
     114#define _beginthreadex(security, \
     115                       stack_size, \
     116                       start_proc, \
     117                       arg, \
     118                       flags, \
     119                       pid) \
     120        CreateThread(security, \
     121                     stack_size, \
     122                     (LPTHREAD_START_ROUTINE) start_proc, \
     123                     arg, \
     124                     flags, \
     125                     pid)
     126#endif //!(_WIN32_WCE)
    129127        }
    130128
    131         typedef void* uintptr_t;
    132 
    133         inline uintptr_t _beginthreadex(void* security, unsigned stack_size, unsigned (__stdcall* start_address)(void*),
    134                                               void* arglist, unsigned initflag, unsigned* thrdaddr)
    135         {
    136             DWORD threadID;
    137             ThreadProxyData* data = new ThreadProxyData(start_address,arglist);
    138             HANDLE hthread=CreateThread(static_cast<LPSECURITY_ATTRIBUTES>(security),stack_size,ThreadProxy,
    139                                         data,initflag,&threadID);
    140             if (hthread==0) {
    141               delete data;
    142               return 0;
    143             }
    144             *thrdaddr=threadID;
    145             return reinterpret_cast<uintptr_t const>(hthread);
    146         }
    147 
    148 #endif
    149 
    150     }
    151 
    152129    namespace detail
    153130    {
    154131        struct thread_exit_callback_node