使用boost :: thread :: native_handle()在WaitForSingleObject中崩溃

时间:2013-10-16 10:40:17

标签: c++ multithreading winapi boost

我看到下面一段代码崩溃了。此方法正在等待使用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.
........
........

}

我的问题是 -

  1. 第一段代码中是否有问题。根据提升文档,它看起来很好。

  2. 即使有问题应该是其他方式,即如果传递给它的过时句柄,WaitForSinfleObject()应该崩溃,而不是传递给它的有效句柄。有什么想法吗 ?

  3. 我修复错误的方法是否正确?

  4. 注意 - 我无法调试此问题,因为在调试器中,时间控件到达调试器中的WaitForSingleObject,T1已经完成了它的执行,因此我没有观察到任何崩溃。

0 个答案:

没有答案