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

标签 c multithreading winapi

我在 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/

相关文章:

java - Java 是否可以在一个线程中并行运行多个任务?

java - 防止对对象的并发修改

c - 如何获取选项卡项的TCITEM结构?

c++ - 视觉 C++ : Convert data type PCSTR to LPCWSTR

c++ - extern 声明变量和全局变量的区别

c - C 中 clock() 函数的准确性

c - 从文件中获取行,放入结构数组,打印内容(作业)

将整数转换为数字数组 [C]

java - android中的后台线程

c++ - 如何使用 win32 api C++ 在系统托盘图标中显示文本 - 第 2 部分