高分求教:终止线程问题
来源:百度知道 编辑:UC知道 时间:2024/06/12 17:26:13
问题是,如果程序运行时子线程在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;
}