在问题are std::signal and std::raise thread-safe?中有一些注释来区分进程间的通信和多线程的通信。我想赞同signal
仅在IPC的性质上使用//C++11 standard conformance
#include <csignal>
#include <thread>
void function(){
//some a loop
while(/* predicate to exit */)
{
//...
}
}
//we might wish to flag a volatile variable in the following handler for asynchronous thread of this program to judge on to exit. But it's not certainly that thread of handler rather than function blocks on these signals! (O.o)
void handler(int signal){
switch(signal){
case SIGINT: //...upon interruption
case SIGTERM: //...upon termination
case SIGQUIT: //...upon quit
}
}
int main(int argc, char * argv[]){
std::signal(SIGINT, handler);
std::future<void> result=std::async(std::launch::async, function);
return 0;
}
的观点。但是,开发人员总是需要为他们的程序设置信号,无论他们是否决定随后应用IPC或多线程范例,以处理操作系统引发的信号。
所以我的问题是开发人员在这种情况下应该如何处理信号 - 例如,我们希望在出现信号时退出多线程程序。 (“谈话便宜,告诉我代码”)
{{1}}
框架可能对您不言自明。我应该假设它始终是处理程序的线程而不是阻止信号的功能吗?我该怎样做才能终止这个程序呢?