在從CWinThread派生的類中, 實際的線程函數該在何處調用?在如下代碼中, CreateThread()調用後線程應該已產生, 但::WaitForSingleObject為何一直得不到響應?// CEThread派生自CWinThread
CEThread pThrd;
pThrd.CreateThread();
::WaitForSingleObject(pThrd.m_hThread, INFINITE);
CEThread pThrd;
pThrd.CreateThread();
::WaitForSingleObject(pThrd.m_hThread, INFINITE);
// Go()為線程實現函數
CEThread* pThrd = (CEThread*)AfxBeginThread(Go, NULL, THREAD_PRIORITY_NORMAL);
::WaitForSingleObject(pThrd->m_hThread, INFINITE);
沒問題. 在上一種情況下, Go()應該在何處調用?
昰不昰在InitInstance()中實現? ::WaitForSingleObject為何一直得不到響應? 謝謝.
在如下代碼中, CreateThread()調用後線程應該已產生, 但::WaitForSingleObject為何一直得不到響應?// CEThread派生自CWinThread
CEThread pThrd;
pThrd.CreateThread();
::WaitForSingleObject(pThrd.m_hThread, INFINITE);
把线程的实现代码放在Run()函数中,注意重载Run()函数时要将最后
的那句return CWinThread::Run();去掉.如果你的线程还需要响应消息
那么就要按照实际情况来添加代码了.基于CWinThread类的线程和普通线程的区别就在于基于CWinThread类的线程
多出了一个消息泵,这个消息泵就是这个Run()函数。你的线程之所以不退出就是因为线程进入了一个消息循环,等待处理消息
如果你不发送一个消息让线程结束的话这种线程是不会自动退出的
这个线程首先会调用InitInstance()函数
然后接下来就执行Run()函数
如果没有重载Run()函数就会进入一个消息循环
等待处理消息没有特殊情况一般不要重载Run()函数,因为重载了
Run()函数也就在一定程度上破坏了这个线程的消息泵没了消息泵的这种线程和普通线程相比就没有任何有优势的地方了