faridz@apache.org wrote: > Author: faridz > Date: Thu Jul 26 10:23:23 2007 > New Revision: 559890 > > URL: http://svn.apache.org/viewvc?view=rev&rev=559890 > Log: > 2007-07-26 Farid Zaripov > > * thread.cpp (rw_thread_create) [_WIN32]: Use _beginthreadex() instead of CreateThread(). What are the advantages of calling _beginthreadex() instead of CreateThread? I ask because I thought that _beginthreadex() was implemented in terms of CreateThread(). Martin > > Modified: > incubator/stdcxx/trunk/tests/src/thread.cpp > > Modified: incubator/stdcxx/trunk/tests/src/thread.cpp > URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/src/thread.cpp?view=diff&rev=559890&r1=559889&r2=559890 > ============================================================================== > --- incubator/stdcxx/trunk/tests/src/thread.cpp (original) > +++ incubator/stdcxx/trunk/tests/src/thread.cpp Thu Jul 26 10:23:23 2007 > @@ -36,8 +36,6 @@ > #ifndef _WIN32 > # include // for FILE, fscanf(), popen() > # include // for sysconf(), _SC_NPROCESSORS_{CONF,ONLN} > -#else // _WIN32 > -# include // for GetSystemInfo() > #endif // _WIN32 > > /**************************************************************************/ > @@ -241,7 +239,8 @@ > /**************************************************************************/ > > #elif defined (_WIN32) || defined (_WIN64) > -# include > +# include // for GetSystemInfo() > +# include // for _beginthreadex() > > extern "C" { > > @@ -258,34 +257,33 @@ > if (0 == thr_id) > thr_id = &tmpid; > > - DWORD nid; // numerical id > - > - typedef DWORD ThreadProc (LPVOID); > + unsigned nid; // numerical id > > - LPTHREAD_START_ROUTINE win32_thr_proc = > - _RWSTD_REINTERPRET_CAST (LPTHREAD_START_ROUTINE, thr_proc); > + typedef unsigned int (__stdcall *win32_thr_proc_t)(void *); > + win32_thr_proc_t win32_thr_proc = > + _RWSTD_REINTERPRET_CAST (win32_thr_proc_t, thr_proc); > > // set the thread number *before* creating the thread > // so that it's visible in thr_proc when it starts to > // run even before CreateThread returns > thr_id->threadno = maxthreads; > > - const HANDLE hthread = > - CreateThread (0, // lpThreadAttributes > - 0, // dwStackSize > - win32_thr_proc, // lpStartAddress > - thr_arg, // lpParameter > - 0, // dwCreationFlags > - &nid); // lpThreadId > + const uintptr_t hthread = > + _beginthreadex (0, // lpThreadAttributes > + 0, // dwStackSize > + win32_thr_proc, // lpStartAddress > + thr_arg, // lpParameter > + 0, // dwCreationFlags > + &nid); // lpThreadId > > - if (INVALID_HANDLE_VALUE == hthread) { > + if (!hthread) { > thr_id->id = -1; > thr_id->handle = 0; > result = -1; > } > else { > thr_id->id = nid; > - thr_id->handle = hthread; > + thr_id->handle = _RWSTD_REINTERPRET_CAST (void*, hthread); > ++maxthreads; > } > > > >