我不明白为什么下一个代码不能工作。它编译正确,但不输出任何内容。你能帮帮我吗?
HANDLE hEvent;
unsigned int WINAPI MyThread(void *p)
{
WaitForSingleObject(hEvent, INFINITE);
_tprintf(TEXT("%s\n"),p);
return 0;
}
int _tmain(int argc, TCHAR *argv[])
{
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
unsigned int ThreadID;
HANDLE hThread1 = (HANDLE)_beginthreadex(NULL, 0, MyThread, L"hello world", 0, &ThreadID);
SetEvent(hEvent);
return 0;
}发布于 2012-10-18 02:43:24
您可以设置事件,然后立即退出。
HANDLE hThread1 = (HANDLE)_beginthreadex(NULL, 0, MyThread, L"hello world", 0, &ThreadID);
SetEvent(hEvent);
WaitForSingleObject( hThread1, INFINITE );注意:我只是在示例中使用INFINITE作为超时,通常您可能不希望INFINITE导致死锁等。每种情况都需要检查以确定正确的行为。在这里,由于您只是在向控制台写入内容,如果在几秒钟内没有返回,则可能是出了什么问题。您可以修改代码以检查WaitForSingleObject的返回值,以查看它是否由于超时而退出,然后根据该返回值做出决定(例如记录错误,或有助于诊断出问题的原因)
发布于 2012-10-18 02:42:48
您的程序甚至在线程开始之前就停止了。
发布于 2012-10-18 02:46:14
把这个放在你的return 0;前面,你应该会得到一些结果
DWORD retVal;
GetExitCodeThread(hThread1, &retVal);
while(retVal == STILL_ACTIVE) {
Sleep(1000);
GetExitCodeThread(hThread1, &retVal);
}retVal还将帮助您查看线程是如何结束的(假设您有不同的退出代码,例如_endthreadex(6);)
https://stackoverflow.com/questions/12941056
复制相似问题