我实际搜索的是用于.net ThreadState Enumeration的c++/win32等效项。
有什么建议吗?
发布于 2011-11-19 00:18:35
它们之间的差别很小,都是等待不同的内核对象。
我假设你说的“等待”指的是"I/O等待“。"Join“就是”等待线程/进程“。“睡眠”是“等待计时器”。
更复杂的是,线程可以等待内核对象的某种组合。
您可以使用内核调试器找出线程正在等待的对象以及这些对象的类型。我不认为有更简单的方法。
发布于 2011-11-19 00:25:21
没有直接的等价物-托管线程和非托管线程不应被视为相同的线程。参见here。
操作系统ThreadId与托管线程没有固定的关系,因为非托管宿主可以控制托管线程和非托管线程之间的关系。具体地说,复杂的主机可以使用Fiber来针对同一操作系统线程调度多个托管线程,或者在不同的操作系统线程之间移动托管线程。
发布于 2011-11-19 06:34:05
使用winapi容易访问的本机线程的唯一状态是用于知道该线程是否已完成其执行。只需使用带有线程句柄和超时0的函数WaitForSingleObject():
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;
}https://stackoverflow.com/questions/8185437
复制相似问题