信号是否会中断主线程,还是从某个操作系统线程调用?换句话说,在执行信号处理程序时,我是否必须担心线程安全?例如,如果在单独的线程上调用on_sigint
,以下代码将随机失败。他们?会吗?哪个线程是调用的信号处理程序(例如signal(SIGINT,crtl_c);)?
#include <csignal>
#include <windows.h>
HANDLE hSigint;
void on_sigint(int sig)
{
if (hSigint != NULL) SetEvent(hSigint);
else hSigint = INVALID_HANDLE_VALUE;
}
int wmain(int argc, wchar_t** argv)
{
hSigint = NULL;
signal(SIGINT, on_sigint);
BuildSomething();
if (hSigint == NULL)
{
hSigint = CreateEvent(NULL, TRUE, FALSE, NULL);
SetSomethingInMotion();
WaitForSingleObject(hSigint, INFINITE);
}
TearSomethingDown();
return 0;
}
尽管有Windows示例,但Linux的答案也很受欢迎。
您使用MSVCRT吗? – Ben 2013-04-08 16:45:17
我这么认为。我正在使用Visual Studio 2012. – 2013-04-08 22:22:42