在Windows中,有没有一种方法可以捕获Worker线程上的信号



在注册信号后的工作线程上的Windows中,如果我调用一些MAV代码,则信号不会被捕获。

void RegisterSignals()
{
typedef void (*SignalHandlerPointer)(int);
SignalHandlerPointer previousHandler;
previousHandler = signal(SIGSEGV, SignalHandler);
... // Registering other signals   
}
void BadFunc () 
{
int *ptr = nullptr;
*ptr = 45;
}

由于该应用程序是一个多线程环境,并且我使用了MSDN线程API,我甚至尝试为每个线程注册信号,但即使这样也没有成功。

有没有什么方法可以让信号被捕获?有人能帮我吗?

感谢所有意见和建议

signal(SIGSEGV, ...)在Windows上不能像那样工作。在Windows上,std::signalstd::raise协同工作。不能使用"未定义的行为"发出信号。

在操作系统级别,Windows使用与C++无关的结构化异常处理(SEH(。此处将发生的Microsoft结构化异常是AccessViolation(0xC0000005)

最新更新