Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有效的信号处理 我有一个C++程序,它把命令行参数路径传递给一些文件,然后进行一些数字处理。没有进一步的用户输入,但是程序可能会在stdout上输出一些东西。 我现在想知道如何为这个程序实现信号处理。无论接收到什么信号,程序都将结束,但如果用户中断程序,则主信号为SIGINT,如果达到某个超时,则主信号为SIGALRM。但是,在退出程序之前,我需要打印一些摘要到stdout 我对C++(来自C/J/java)的新想法,我想知道如何高效地完成这一点。我已经阅读了文档,如果理解正确,就不允许在信号处理程序中向标准输出任何内容。在研究过程中,我遇到的标准方法是设置一面旗帜,并不断检查该旗帜。然而,我不太喜欢这种方法,因为这会引入许多附加的条件跳转_C++_Signals - Fatal编程技术网

有效的信号处理 我有一个C++程序,它把命令行参数路径传递给一些文件,然后进行一些数字处理。没有进一步的用户输入,但是程序可能会在stdout上输出一些东西。 我现在想知道如何为这个程序实现信号处理。无论接收到什么信号,程序都将结束,但如果用户中断程序,则主信号为SIGINT,如果达到某个超时,则主信号为SIGALRM。但是,在退出程序之前,我需要打印一些摘要到stdout 我对C++(来自C/J/java)的新想法,我想知道如何高效地完成这一点。我已经阅读了文档,如果理解正确,就不允许在信号处理程序中向标准输出任何内容。在研究过程中,我遇到的标准方法是设置一面旗帜,并不断检查该旗帜。然而,我不太喜欢这种方法,因为这会引入许多附加的条件跳转

有效的信号处理 我有一个C++程序,它把命令行参数路径传递给一些文件,然后进行一些数字处理。没有进一步的用户输入,但是程序可能会在stdout上输出一些东西。 我现在想知道如何为这个程序实现信号处理。无论接收到什么信号,程序都将结束,但如果用户中断程序,则主信号为SIGINT,如果达到某个超时,则主信号为SIGALRM。但是,在退出程序之前,我需要打印一些摘要到stdout 我对C++(来自C/J/java)的新想法,我想知道如何高效地完成这一点。我已经阅读了文档,如果理解正确,就不允许在信号处理程序中向标准输出任何内容。在研究过程中,我遇到的标准方法是设置一面旗帜,并不断检查该旗帜。然而,我不太喜欢这种方法,因为这会引入许多附加的条件跳转,c++,signals,C++,Signals,我知道,过早优化是万恶之源。当然,我最终可能会实现标记方法,但是因为我是C++新手,我想知道是否有一种我不知道的方法。我考虑生成一个新线程来进行计算,并在主线程中使用sigwait来等待信号,如果收到信号,则打印摘要,然后退出进程 有更好的办法吗 谢谢! 亚历克斯1。您可以从信号处理程序打印-只需确保您没有调用任何非异步信号安全的东西。2.你为什么担心“条件跳跃”?程序即将退出。那么这里的效率问题是什么?3.sigwait方法很好。但如果已经有多个线程,则通常会执行此操作。如果你的程序是单线程的

我知道,过早优化是万恶之源。当然,我最终可能会实现标记方法,但是因为我是C++新手,我想知道是否有一种我不知道的方法。我考虑生成一个新线程来进行计算,并在主线程中使用sigwait来等待信号,如果收到信号,则打印摘要,然后退出进程

有更好的办法吗

谢谢!
亚历克斯

1。您可以从信号处理程序打印-只需确保您没有调用任何非异步信号安全的东西。2.你为什么担心“条件跳跃”?程序即将退出。那么这里的效率问题是什么?3.sigwait方法很好。但如果已经有多个线程,则通常会执行此操作。如果你的程序是单线程的,没有必要让一个单独的线程来处理信号。谢谢你提供的信息。广告1:当我在程序中读取文件和打印时,我得出结论,我不能从信号处理器打印。广告2:跳转将是从支票到我需要在整个程序中放置的标志。类似于if(flag){//Print summary and exit}。因此,这个检查会在程序中发生无数次。ad 3:我知道,我想在没有额外线程的情况下进行检查,但我找不到其他方法在没有标记的情况下进行检查。当然,创建一个附加的线程将带来显著的开销,但是它是恒定的,而对标志的检查将在程序运行时引起线性成本。@ P.:ActhCysSoals的概念是POSIX概念,但POSIX没有C++绑定。C++本身不定义<代码>异步信号安全>代码>。C++有非常有限的安全列表,而<>代码:STD::CUT不在该列表中,也不是<代码> STD::Prtff。不能从信号处理程序打印。注意,代码> SigWalth//Cord>是POSIX函数,而不是便携式C++函数。它很有可能仍然有效;C和C++线程和内存模型是有意相同的。