首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有等待功能的简单线程

具有等待功能的简单线程
EN

Stack Overflow用户
提问于 2012-10-18 02:39:36
回答 3查看 267关注 0票数 1

我不明白为什么下一个代码不能工作。它编译正确,但不输出任何内容。你能帮帮我吗?

代码语言:javascript
运行
复制
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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-18 02:43:24

您可以设置事件,然后立即退出。

代码语言:javascript
运行
复制
HANDLE hThread1 = (HANDLE)_beginthreadex(NULL, 0, MyThread, L"hello world", 0, &ThreadID);
SetEvent(hEvent);
WaitForSingleObject( hThread1, INFINITE );

注意:我只是在示例中使用INFINITE作为超时,通常您可能不希望INFINITE导致死锁等。每种情况都需要检查以确定正确的行为。在这里,由于您只是在向控制台写入内容,如果在几秒钟内没有返回,则可能是出了什么问题。您可以修改代码以检查WaitForSingleObject的返回值,以查看它是否由于超时而退出,然后根据该返回值做出决定(例如记录错误,或有助于诊断出问题的原因)

票数 1
EN

Stack Overflow用户

发布于 2012-10-18 02:42:48

您的程序甚至在线程开始之前就停止了。

票数 1
EN

Stack Overflow用户

发布于 2012-10-18 02:46:14

把这个放在你的return 0;前面,你应该会得到一些结果

代码语言:javascript
运行
复制
DWORD retVal;
GetExitCodeThread(hThread1, &retVal);

while(retVal == STILL_ACTIVE) {
    Sleep(1000);
    GetExitCodeThread(hThread1, &retVal);
}

retVal还将帮助您查看线程是如何结束的(假设您有不同的退出代码,例如_endthreadex(6);)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12941056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档