- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 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/
所以我正在深入研究 MFC 的世界,特别是自定义使用 CWinThread 来实现辅助线程。我已经通过其他方式成功实现了工作线程,因此将 CWinThread 用于工作线程的主要动机是利用消息映射。
我有一个非常简单的问题,关于 CWinThread 如何工作以及每次调用 ResumeThread() 时入口点在哪里。我正在寻找一个看起来类似于“主”函数的条目,我可以在其中执行一些操作和分支。 我
我有这样的代码 X *m = new X(); // X - class derived from CWinThread; m->CreateThread(CRREATE_THREAD); m->b_
如您所知,可以在 MFC UI 线程中指定 OnIdle。详情可以看这篇引用http://msdn.microsoft.com/en-us/library/1sa2f19f.aspx .但我不确定如何
我有一个 C++ 应用程序 (VS2008),我这样启动线程: CWinThread *myThread= AfxBeginThread(myOp,0); 现在我要做的就是给这个线程命名,这样我就可以
我正在使用 MFC C++,我正在尝试使用来自 Dlg 类的 PostThreadMessage 将消息发送到 CWinThread,但该消息未在线程类上处理 线程的.H文件: #define
当我调试用 C++ 开发的 Windows 应用程序时,我发现这个函数调用 CWinThread::PumpMessage()。我读过 MSDN以及其他一些要了解的论坛帖子。但仍然不确定它的作用。 有
在我的项目中,我有管理类和计算类。从 CWinThread 派生的 calc 类。和 manager 有一个指向 calc 类的指针。我如何使用 AfxBeginThread 以及在哪里使用?请注意,
我有一个通过 AfxBeginThread 生成线程的循环,它将 CWinThread 指针存储在一个数组中。在每次迭代中,我检查线程是否为空并将线程的句柄存储在另一个数组中。 const unsig
我正在尝试在名为 ClientManager 的类中创建工作线程,但我无法从新的 CWinThread 访问 AfxGetMainWnd(),即: UINT ClientManager::Worker
我正在使用 AfxBeginThread 启动一个线程。这将返回一个指向新的 CWinThread 对象的指针。 MSDN 声明此指针为 NULL,如果线程创建失败,它将释放所有内容。但是,一旦线程在
我正在调用 AfxBeginThread 并使用 CWinThread 在我的 MFC 应用程序中启动一个 UI 线程。 我注意到,如果我的主线程在 CWinThread::InitInstance(
我想知道在 MFC 中使用 CWinThread 派生类作为工作线程的过程是什么。 msdn 文档说 CWinthread::InitInstance() 或 CWinthread::Run() 应该
我正在处理一些遗留代码,这些代码使用 MFC 的 UI 线程来实现管理器线程-工作线程机制。代码过去在 MFC GUI 应用程序下运行,但现在它在一个单独的 dll 中,并且可以从 GUI 应用程序和
我是一名优秀的程序员,十分优秀!