gpt4 book ai didi

c++ - CWinThread 被 AfxBeginThread 创建后谁拥有它?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:52 26 4
gpt4 key购买 nike

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

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

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

最佳答案

清理 CWinThread 对象的责任取决于它的 m_bAutoDelete 值。默认是删除自身。对于 fire and forget short running threads 这很好。它会自行清理。

如果您的线程长时间运行并且需要被告知是时候退出或以其他方式与之交互,您将希望 CWinThread 句柄保持有效并且不指向自删除的对象。

如果您将 m_bAutoDelete 设置为 FALSE,则您声明对删除它负责。为了安全地使用返回的指针,您应该按照 Joseph Newcomer 在他的 Using Worker Threads 中的建议创建暂停并将其设置为 FALSE,然后再恢复。文章。

   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();
}

关于c++ - CWinThread 被 AfxBeginThread 创建后谁拥有它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9723698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com