从控制台无限循环中断

时间:2013-06-23 14:07:19

标签: c++ console-application

我有一个控制台服务器,可以监听客户端并完成他们需要的工作。但有时我需要终端服务器,我不知道如何正确地做到这一点。因为我可以按ctrl + c来结束程序,但是我需要在循环之后执行重要的代码。

main_function(){
    while(true){
        listen();
    }
    do_something_important();
}

我可以从控制台和运行功能中捕获一些信号以执行重要操作并正确结束吗?

end_program(){
    do_something_important();
    return 0;
}

或者在我的情况下我能做的最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

您可以使用信号:

#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;
}