编了一个服务器端不间断运行的程序,内部包括一个界面和一个后台线程,线程在程序结束时Terminate。
运行该程序,发现程序会在一定情况下弹出以下错误:
“Operation cannot be performed while executing asynchronously”
现象1:该错误是在程序运行后,马上关闭程序时出现的(按X按钮);而且这个错误不是一定发生的(我试了一下,大概是10次里会弹出1,2次)。
现象2:在程序运行大概2秒后再退出(按X按钮),未发生该错误。
简直是莫名其妙,请高手指教!

解决方案 »

  1.   

    Terminate只是通知线程应该退出了,所以应该在发送完Terminate后调用waitfor等待线程真的结束后再结束程序的运行。
      

  2.   

    Terminate仅是将一个成员变量的标志设定为true,至于同步问题需要手工完成,
    例如在线程结束之前,出了该函数的循环体之后写如此函数 SetEvent(hThreadFinishedEvent);在主线程函数中,再执行完线程函数Terminate之后,写如下函数
    WaitForSingleObject(hThreadFinishedEvent,INFINITE);
    如果还是不行,那就需要自己耐心的调试了。