C++ 从控制台无限循环中断

C++ 从控制台无限循环中断,c++,console-application,C++,Console Application,我有一个控制台服务器,它监听客户机并执行客户机需要的操作。但有时我需要终端服务器,我不知道如何才能正确地做到这一点。因为我可以点击ctrl+c来结束程序,但我需要在循环后编写重要的代码 main_function(){ while(true){ listen(); } do_something_important(); } 我能从控制台捕捉一些信号并运行函数来完成重要的事情并正确结束吗 end_program(){ do_something_im

我有一个控制台服务器,它监听客户机并执行客户机需要的操作。但有时我需要终端服务器,我不知道如何才能正确地做到这一点。因为我可以点击ctrl+c来结束程序,但我需要在循环后编写重要的代码

main_function(){
    while(true){
        listen();
    }
    do_something_important();
}
我能从控制台捕捉一些信号并运行函数来完成重要的事情并正确结束吗

end_program(){
    do_something_important();
    return 0;
}
或者在我的情况下,我能做的最好的方法是什么?

你可以使用信号:

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

static void on_close(int signal)
{
    puts("Cleaning up...");
    exit(EXIT_SUCCESS);
}

int main(void)
{
    signal(SIGINT, on_close);

    while (1)
    {
    }

    return EXIT_SUCCESS;
}
#包括
#包括
#包括
关闭时静态无效(int信号)
{
提出(“清理…”);
退出(退出成功);
}
内部主(空)
{
信号(SIGINT,on_关闭);
而(1)
{
}
返回退出成功;
}

使用所述的Pragmateek信号,但确保仅在信号处理程序中设置一个标志(如exitnow=true),并在主循环中检查该标志。信号可能会在代码中的任何一点中断主程序,因此如果您想确保您的逻辑不会被随机中断或截断,使用信号处理程序仅设置标志。

可能重复的可能重复的可能重复的+1为获得最佳实践,如果主循环卡住,甚至可以添加一个计数器,以便如果用户请求结束,例如3次,则直接退出。