等待所有子线程完成(在C中)

时间:2013-05-09 13:52:47

标签: c multithreading winapi

代码第一

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信号)。

1 个答案:

答案 0 :(得分:3)

  1. 维护一个HANDLE列表,其中包含已成功创建的主题的句柄(如果成功,则HANDLE的结果为CreateThread()。)
  2. 在应用程序退出之前,使用WaitForMultipleObjects()加入每个线程。