我在 C 中使用 _beginthread()
创建了 5 个线程池。池中的所有线程将无限运行以完成从客户端收到的作业。例如,当客户端连接时,池中的空闲线程将处理此问题。完成任务后,线程将等待下一个客户端。现在我的问题是,每当我从服务器输入 ctrl+c 时,程序就会终止。但我想在终止主线程之前关闭池中所有正在运行和等待的线程。
最佳答案
对于 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,您就可以关闭所有线程和其他清理内容
关于c - 如何通过中断ctrl+c关闭主线程之前的所有线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44405617/