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