如何设置MFC线程的超时

时间:2016-07-14 12:53:51

标签: c++ multithreading mfc

我需要创建一个尝试在特定时间内执行函数的线程。如果线程没有成功,我需要用一个表示错误的数字来完成它。

我正在尝试这样做,因为我必须执行我的程序的外部库,但有时在搜索尚未准备好的资源时进入无限循环并且程序中断等待该函数。

1 个答案:

答案 0 :(得分:1)

你无法通过将错误的实现卸载到同一进程中的另一个线程来解决这个问题,因为如果它运行错误,就无法安全地关闭该线程。调用TerminateThread是从外部取下线程的唯一方法。由于后果,当进程必须继续可靠地运行时,不能使用它。

  

例如, TerminateThread 可能会导致以下问题:

     
      
  • 如果目标线程拥有临界区,则不会释放临界区。
  •   
  • 如果目标线程正在从堆中分配内存,则不会释放堆锁。
  •   
  • 如果目标线程在终止时正在执行某些kernel32调用,则线程进程的kernel32状态可能不一致。
  •   
  • 如果目标线程正在操纵共享DLL的全局状态,则DLL的状态可能会被破坏,从而影响DLL的其他用户。
  •   

您唯一的选择是:

  1. 从第三方库的供应商处请求修正错误。
  2. 将第三方库卸载到自己的进程中。在此代理过程中,您可以在自己的线程上运行第三方库,如果它没有及时返回(使用带有超时值的WaitForSingleObject来确定该条件),请致电ExitProcess结束痛苦您必须在流程之间实施interprocess communications才能实现此目的。