スレッドのリストに格納するスレッドの ID を取得しようとしています。
long
これを行うには、スレッド ID を格納するへのポインターを使用してスレッドを起動します。スレッド ID は、スレッド関数が実行されるとすぐに保存する必要があります。ID が保存されると、起動機能を続行できるはずです。
このコードはデバッグ モードでのみ動作するように見えますが、リリース モードではハングします。Visual C++ 2008 Express を使用しています。
Windows XP で動作するコードが必要です。残念ながらGetThreadId
、Windows Server 2003 以降でのみサポートされているため、単純に使用することはできません。
thread_wrapper* spawn_thread(void *entryPoint, void *params)
{
thread_wrapper *newThread = calloc(1, sizeof(thread_wrapper));
_beginthread(spawned_thread_wrapper_func, 0, &newThread->_win32ThreadID);
while (newThread->_win32ThreadID == 0) ; // Hangs here in Release mode
... // Safely add thread to list using critical section
return newThread;
}
void spawned_thread_wrapper_func(void *params)
{
long *outThreadIDPtr = (long *)params;
*outThreadIDPtr = GetCurrentThreadId();
// spawn_thread function should now be able to add thread to list
// but still hangs on while waiting loop in Release mode.
// Works fine in Debug mode.
...
}
ここで何がうまくいかないのですか?