结束活动前的Windows窗体事件?

时间:2015-07-31 23:42:09

标签: windows multithreading forms c++-cli

退出我的应用Windows窗体应用程序时,我遇到了令人讨厌的竞争条件。在运行时,我必须轮询由Active X控件封装的硬件设备:

while(!pollingThreadStop)
{
    //get the current status
    x = axFoo-> GetStatus();
    //do something
}
pollingThreadStopped=true;

在Form的结束事件中,我尝试检测用户是否正在退出并停止该线程:

    private: System::Void Form1_Closing( Object^ sender, System::ComponentModel::CancelEventArgs^ e )
{
  pollingThreadStop=true;
  while(!pollingThreadStopped)
      Sleep(10);
}

不幸的是,这似乎触发了一个竞争条件,其中axFoo可以在触发Closing事件之前开始关闭,我想因为ActiveX控件知道窗口正在关闭(?),在这种情况下它有时会在调用时死锁到GetStatus,因为硬件已经脱机。有什么方法我可以检测到用户试图在流程早期关闭Window,以便我可以及时退出轮询线程?添加一个关闭轮询然后关闭的GUI按钮确实有效,但我真的不必这样做。

0 个答案:

没有答案