首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c++中确定win32线程处于等待、联接或睡眠状态

如何在c++中确定win32线程处于等待、联接或睡眠状态
EN

Stack Overflow用户
提问于 2011-11-19 00:15:17
回答 4查看 2.9K关注 0票数 3

我实际搜索的是用于.net ThreadState Enumeration的c++/win32等效项。

有什么建议吗?

EN

回答 4

Stack Overflow用户

发布于 2011-11-19 00:18:35

它们之间的差别很小,都是等待不同的内核对象。

我假设你说的“等待”指的是"I/O等待“。"Join“就是”等待线程/进程“。“睡眠”是“等待计时器”。

更复杂的是,线程可以等待内核对象的某种组合。

您可以使用内核调试器找出线程正在等待的对象以及这些对象的类型。我不认为有更简单的方法。

票数 3
EN

Stack Overflow用户

发布于 2011-11-19 00:25:21

没有直接的等价物-托管线程和非托管线程不应被视为相同的线程。参见here

操作系统ThreadId与托管线程没有固定的关系,因为非托管宿主可以控制托管线程和非托管线程之间的关系。具体地说,复杂的主机可以使用Fiber来针对同一操作系统线程调度多个托管线程,或者在不同的操作系统线程之间移动托管线程。

票数 2
EN

Stack Overflow用户

发布于 2011-11-19 06:34:05

使用winapi容易访问的本机线程的唯一状态是用于知道该线程是否已完成其执行。只需使用带有线程句柄和超时0的函数WaitForSingleObject()

代码语言:javascript
复制
DWORD res = WaitForSingleObject(handleThread, 0);
switch (res)
{
    case WAIT_OBJECT_0:
        printf("The thread has finished\n");
        break;
    case WAIT_TIMEOUT:
        printf("The thread is still running\n");
        break;
    default:
        printf("Unknown error (shouldn't happen)\n");
        break;

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

https://stackoverflow.com/questions/8185437

复制
相关文章

相似问题

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