如何通过中断ctrl + c来关闭主线程之前的所有线程?

时间:2017-06-07 06:56:55

标签: c multithreading winapi

我在C中使用_beginthread()创建了5个线程池。池中的所有线程都将无限运行以从客户端接收作业。例如,当客户端连接时,池中的空闲线程将处理此问题。完成任务后,线程将等待下一个客户端。现在我的问题是,每当我从服务器输入ctrl+c时,程序就会终止。但我希望在终止主线程之前关闭池中所有正在运行和等待的线程。

1 个答案:

答案 0 :(得分:1)

适用于Windows

#include <windows.h> 
#include <stdio.h> 

BOOL WINAPI signal_handler(DWORD signal) {

    if (signal == CTRL_C_EVENT){
        printf("CTRL C caught here .\n");
    }
    return TRUE;
}

main()
{
    ....
    SetConsoleCtrlHandler(signal_handler, TRUE);

   .....

     printf("This should appear after signal_handler\n");
}

对于linux

#include<stdio.h>
#include<signal.h>    

void signal_handler() 
{
    printf("CTRL C caught here .\n");
}

main() 
{

    ...
    // SIGINT is signal name create  when Ctrl+c will pressed 
    signal(SIGINT,signal_handler);  



    printf("This should appear after signal_handler\n");

}

捕获ctrl-c后,您可以关闭所有线程和其他清理内容