线程为什么不能终止?
HANDLE hHdl;
HANDLE hStopEvent;
UINT __stdcall MyFunc(LPVOID pParam)
{
HANDLE hArr={hStopEvent,...}
int n = sizeof(hArr)/sizeof(HANDLE);
bool bRun = true;
while (bRun)
{
dwWait=WaitForMultipleObjects(n,hArr,FALSE,INFINITE);
switch (dwWait)
{
case WAIT_OBJECT_0:
bRun=false;
break;
case WAIT_OBJECT_0+1:
...
break;
default:
break;
}
}
_endthreadex(0);
}
void CreateMyThread()
{
hStopEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
hHdl = (HANDLE)_beginthreadex(NULL, 0, MyFunc, NULL, CREATE_SUSPENDED, NULL);
ResumeThread(hHdl);
}
void FinalMyThread()
{
SetEvent(hStopEvent);
DWORD dwWait = WaitForSingleObject(hHdl, 20000L);
if (dwWait == WAIT_TIMEOUT)
{
GetExitCodeThread(hHdl, &dwExitCode);
if (dwExitCode == STILL_ACTIVE)
{
TerminateThread(hHdl, 1);
}
}
}
上述代码在DLL中实现,当调用FinalMyThread()后,每次都要等足20秒,进程才能退出。
单步跟踪的结果是:MyFunc()每当执行到_endthreadex(0)的时候就没响应了,所以每次都要通过TerminateThread来关闭线程。
MSDN上说non-MFC线程不能操作MFC对象,MyFunc中仅仅使用了一个包含了CString的类实例,但并没有操作其中的CString成员对象。
不知为什么线程不能终止?