1

以下是Microsoft Windows 网络编程的代码片段:

...
// Determine how many processors are on the system.
GetSystemInfo(&SystemInfo);

// Create worker threads based on the number of
// processors available on the system. For this
// simple case, we create one worker thread for each
// processor.

for (int i = 0; i < SystemInfo.dwNumberOfProcessors; i++)
{
    // Create a server worker thread, and pass the
    // completion port to the thread. NOTE: the
    // ServerWorkerThread procedure is not defined
    // in this listing.

    HANDLE ThreadHandle = CreateThread(NULL, 0, ServerWorkerThread, CompletionPort, 0, NULL);

    // Close the thread handle
    CloseHandle(ThreadHandle);
}
...

我不明白为什么样本会直接关闭线程句柄。是否不需要存储它们(例如在 std::vector 中),以便稍后退出程序时终止所有工作线程?

4

1 回答 1

2

这不是必要的。来自CloseHandle 上的 msdn

关闭线程句柄不会终止关联的线程或删除线程对象。关闭进程句柄不会终止关联的进程或删除进程对象。要删除线程对象,您必须终止线程,然后关闭该线程的所有句柄。有关详细信息,请参阅终止线程。要删除进程对象,您必须终止该进程,然后关闭该进程的所有句柄。有关详细信息,请参阅终止进程。

实际上,自包含线程通常在其句柄立即关闭的情况下创建,这允许在线程退出时释放资源。

于 2012-07-26T14:44:29.937 回答