如何正确关闭DLL中实例化的线程池

时间:2017-11-20 19:52:56

标签: c++ windows multithreading visual-studio dll

我在多平台库中有一个ThreadPool类(简化版here),可以编译为静态或动态。我在第一次使用时创建线程,并通过提交虚拟作业在析构函数中清理它们。

除了Windows + DLL的组合之外它运行良好,其中线程在课程之前是terminated by the OS。在库的DllMain函数中调用析构函数。

这是Visual Studio中的错误吗?已经something similar了。如果没有,是否有比以下更优雅的解决方案:

  bool waitForThreads = true;
#if defined(WIN32) && !defined(ITK_STATIC)
  DWORD dwWaitResult = WaitForSingleObject(m_Threads[0], 1);
  if (dwWaitResult == WAIT_OBJECT_0) //thread has finished
  {
      //thread terminated by CRT
      waitForThreads = false;
  }
#endif

  if (waitForThreads) //add dummy jobs for clean thread exit
  {...}

0 个答案:

没有答案