信號是否會中斷主線程,還是從某個操作系統線程調用?換句話說,在執行信號處理程序時,我是否必須擔心線程安全?例如,如果在單獨的線程上調用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