高分求教:终止线程问题

来源:百度知道 编辑:UC知道 时间:2024/06/12 17:26:13
下面的这段程序,想要通过创建一个子线程处理一些事情,而主线程等待该子线程返回,如果20秒钟子线程仍然没有结束,则调用PostThreadMessage终止该线程。

问题是,如果程序运行时子线程在20秒钟内没有结束而导致主线程调用了PostThreadMessage,则程序就会报如下的错误:

Debug Assertion Failed!
File: wincore.cpp
Line:980

但是wincore.cpp并不是我程序中的一个源文件。

如果我不用PostThreadMessage而是用TerminateThread来结束线程,也会报同样的错误。

请高手指点!

HANDLE g_event=NULL;
CWinThread * g_hThread=NULL;

g_hThread=AfxBeginThread(ThreadFunc, &thread_params, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
if(WaitForSingleObject(g_event,20*1000)!=WAIT_OBJECT_0)
{
PostThreadMessage(g_hThread->m_nThreadID,WM_QUIT,0,0);
}

UINT ThreadFunc(LPVOID pParam)
{
//do something here,it may take more than 20 seconds.
SetEvent(g_event);
return 0;
}

你看看你的wincore.cpp980行的断言是什么
似乎是
#ifdef _DEBUG //979
ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);//980
#endif//981
这个是出现在 CWnd::DestroyWindow() 中,与线程应该没什么关系吧。

参考mdsn吧。PostThreadMessage的目标线程必须有消息循环。
TerminateThread的参数是线程句柄,不是线程ID。确认下吧

我是初学者,你看这样可以么
#include<stdio.h>
#include<windows.h>
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
int i=0;
while(true)
printf("I am from a thread,count=%d\n",i++);
return 0;
}
int main(int argc, char*argv[])
{
HANDLE hThread;
DWORD dwThreadId;
hThread=::CreateThread(NULL,NULL,ThreadProc,NULL,0,&dwThreadId);
printf("Now another thread has been created,ID=%d\n",dwThreadId);
if(WaitForSingleObject(hThread,1*1000)!=WAIT_OBJECT_0)
{
TerminateThread(hThread,0);
return 0;
}
::CloseHandle(hThread);
return 0;
}