0
守则第一等待所有子线程来完成(在C)
while(running)
{
memset(&tcp_client, 0, tcp_client_len);
FD_ZERO(&readFDs);
FD_SET(tcp_server_s, &readFDs);
tv.tv_sec = 1;
if(select(0, &readFDs, NULL, NULL, &tv))
{
if((tcp_client_s = accept(tcp_server_s, (struct sockaddr *)&tcp_client,&tcp_client_len)) == INVALID_SOCKET)
{
cli_log(PROTO_TCP, LOG_ERROR, "(%d) accept() failed\n", WSAGetLastError());
continue;
}
cli_log(PROTO_TCP, LOG_COMM, "(%s:%d) accepted connection\n", inet_ntoa(tcp_client.sin_addr), ntohs(tcp_client.sin_port));
CreateThread(NULL, 0, tcp_thread, (LPVOID)tcp_client_s, 0, NULL);
}
}
这是我的TCP线程处理程序的一部分。我想知道的是如何让它等待他的所有子线程退出时不running
了(CTRL + C信号)之前完成。
如果我通过包含已经关闭线程'HANDLE'列表会发生什么处理成'WaitForMultipleObjects的()'? – Ithilion 2013-05-09 14:11:52
文档状态:_IF这些手柄之一,而等待仍悬而未决关闭时,函数的行为是undefined._如果包含在进入功能关闭,目前尚不清楚。我会建议从列表中删除它。 – hmjd 2013-05-09 14:14:34