我正在使用AfxBeginThread启动线程。这将返回一个指向新CWinThread对象的指针。

MSDN指出此指针为NULL,如果线程创建失败,它将取消分配所有内容。但是,在定期启动后线程退出后,CWinThread对象仍然存在。我不确定应该删除CWinThread对象还是由MFC本身完成(尽管看起来并非如此)。

仅供引用,线程不太可能退出,因为线程应该运行直到应用程序结束。但是,由于我使用它作为线程池的一部分,所以我不希望CWinThread永远卡在aorund上。

最佳答案

清理CWinThread对象的责任取决于它的m_bAutoDelete值。默认为删除自身。着火了,忘了短的运行线程,这很好。它将自行清理。

如果您的线程运行时间长,并且需要告知它该退出或进行其他交互的时间了,您将希望CWinThread句柄保持有效并且不指向自删除对象。

如果将m_bAutoDelete设置为FALSE,则要求您负责删除它。为了安全地使用返回的指针,您应该将其创建为suspended,然后将其设置为FALSE,然后再继续执行,如Joseph Newcomer在其Using Worker Threads文章中所建议的那样。

   thread = AfxBeginThread(proc, this,
                       THREAD_PRIORITY_NORMAL, // default: use it
                       0,     // default stack size
                       CREATE_SUSPENDED); // let us set auto delete
   if(thread) { // protect against that rare NULL return
       thread->m_bAutoDelete = FALSE;
       thread->ResumeThread();
   }

10-08 08:21