C++ 使用boost::thread::native_handle()在WaitForSingleObject中崩溃
我在下面的代码中看到了崩溃。此方法正在等待使用boost::thread()api创建的线程完成。根据boost,下面的代码似乎是正确的,但我始终观察到以下行为 如果线程T1在调用reach到WaitforSingleObject时已经完成,这意味着在WaitforSingleObject中传递了一个过时的句柄,那么什么也不发生,它返回0。C++ 使用boost::thread::native_handle()在WaitForSingleObject中崩溃,c++,multithreading,winapi,boost,C++,Multithreading,Winapi,Boost,我在下面的代码中看到了崩溃。此方法正在等待使用boost::thread()api创建的线程完成。根据boost,下面的代码似乎是正确的,但我始终观察到以下行为 如果线程T1在调用reach到WaitforSingleObject时已经完成,这意味着在WaitforSingleObject中传递了一个过时的句柄,那么什么也不发生,它返回0。 但若线程T1仍然存在,并且控件到达waitforSingleObject(),则表示向waitforSingleObject传递了一个有效句柄,但它立即崩溃
但若线程T1仍然存在,并且控件到达waitforSingleObject(),则表示向waitforSingleObject传递了一个有效句柄,但它立即崩溃 问题代码-
void waitForJoin( volatile int &exit_now, boost::thread &T1 ) {
.........
.........
WaitForSingleObject( T1.native_handle(), INFINITE ); // Crashes here.
........
........
}
当我用join()方法替换WaitForSingleObject()时,一切正常
void waitForJoin( volatile int &exit_now, boost::thread &T1 ) {
.........
.........
T1.join() // Works.
........
........
}
我的问题是——
注意-我无法调试这个问题,因为在调试器中,当控件到达调试器中的WaitForSingleObject时,T1已经完成了它的执行,所以我没有观察到任何崩溃 只需编辑T1的代码并在那里放置类似5分钟睡眠的内容,然后调试waitForJoin。你们有什么样的崩溃?@Peter若我尝试调试或打开所有调试跟踪,那个么问题就不会发生。我们在T1阶段的5分钟睡眠中想要实现什么?这是应用程序崩溃。如果没有Join()调用,T1就不存在了,调用本机的\u handle()会失败吗?分离调用-将结果从native_handle()加载到临时句柄中,并查看是NH还是WFSO失败。当您不断重复应用程序崩溃时,您没有描述这是什么意思。有很多场景人们会称之为“崩溃”,包括由于未处理的异常而导致的确定性进程关闭。另外,您是否尝试过在调试器下运行发布版本,并在引发SEH(Win32)异常时启用中断调试器?如果不是的话,你应该做得比撞车更好。请发送诊断和错误消息。