jjzjj

CWinThread

全部标签

windows - 等待 AfxBeginThread/CWinThread 消息泵激活?

我正在调用AfxBeginThread并使用CWinThread在我的MFC应用程序中启动一个UI线程。我注意到,如果我的主线程在CWinThread::InitInstance()函数返回之前尝试将PostThreadMessage()发送到我的新线程,那么PostThreadMessage()将返回错误:无效的线程句柄。我的猜测是新线程上的消息泵直到InitInstance返回后才设置。我看到的AfxBeginThread示例代码和我读过的文档并没有很好地解释这种行为,也没有显示等待线程初始化的模式。在InitInstance返回并且线程的消息泵准备好接收消息之前阻塞主线程的最佳方

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

我正在使用AfxBeginThread启动一个线程。这将返回一个指向新的CWinThread对象的指针。MSDN声明此指针为NULL,如果线程创建失败,它将释放所有内容。但是,一旦线程在定期启动后退出,CWinThread对象仍然存在。我不确定我是否应该删除CWinThread对象,或者这是否由MFC本身完成(尽管看起来并非如此)。仅供引用,线程不太可能退出,因为它应该一直运行到应用程序结束。但是,因为我将它用作线程池的一部分,所以我不希望CWinThread永远挂起。 最佳答案 清理CWinThread对象的责任取决于它的m_bA

c++ - 如何从 CWinThread 访问 AfxGetMainWnd()?

我正在尝试在名为ClientManager的类中创建工作线程,但我无法从新的CWinThread访问AfxGetMainWnd(),即:UINTClientManager::WorkerThreadProc(LPVOIDparam){ClientManager*pThis=reinterpret_cast(param);returnpThis->DoThreadJob();}UINTClientManager::DoThreadJob(){createClientSession("1");return0;}voidClientManager::createThread(){m_clie

c++ - 是否可以命名 CWinThread 线程?

我有一个C++应用程序(VS2008),我这样启动线程:CWinThread*myThread=AfxBeginThread(myOp,0);现在我要做的就是给这个线程命名,这样我就可以在调试时识别它。这听起来像是一项简单的任务,但我找不到实现它的方法。这可能吗?如果可能,如何实现? 最佳答案 如MSDN:HowtosetaThreadNameinNativeCode中所述,这可以相对容易地完成.本质上,您向调试器发送了一个包含名称和线程ID的魔法异常,然后调试器会跟踪并显示您发送给它的名称。MSDN文章中的示例代码包含在下面://