我正在尝试获取线程的 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.
...
}
这里出了什么问题?