我看到下面一段代码崩溃了。此方法正在等待使用boost :: thread()api创建的线程完成。根据提升documentation,代码似乎是正确的,但我始终遵循以下行为
如果线程T1已经通过到WaitforSingleObject的时间调用完成,则表示在waitforSingleObject中传递过时的句柄,然后没有任何反应,它返回0。 但是如果线程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.
........
........
}
我的问题是 -
第一段代码中是否有问题。根据提升文档,它看起来很好。
即使有问题应该是其他方式,即如果传递给它的过时句柄,WaitForSinfleObject()应该崩溃,而不是传递给它的有效句柄。有什么想法吗 ?
我修复错误的方法是否正确?
注意 - 我无法调试此问题,因为在调试器中,时间控件到达调试器中的WaitForSingleObject,T1已经完成了它的执行,因此我没有观察到任何崩溃。