+ -
当前位置:首页 → 问答吧 → 关于结束线程的问题,各位老大请帮忙指点,多谢了

关于结束线程的问题,各位老大请帮忙指点,多谢了

时间:2011-12-11

来源:互联网

各位老大好,小弟求助个问题,是这样的:
我有一个MFC程序,里面用到了一个函数,是耗时返回的,为了不让程序在函数执行中卡死,我就创建了一个线程,把那个耗时的函数放到了线程回调里执行。
可是,我有一个要求,那就是,我必须能在主线程里随时可以终止我创建的这个线程的执行。
这样问题就来了,我看到好多代码和教程里都介绍用事件返回来判断,从而终止线程,可是,我这个不行,因为上面说了,线程回调函数在执行到我那个耗时函数的时候是卡死状态的。
所以,我如果要在线程外终止它的话,就只能强制结束,看小弟下面的代码:

CWinThread* pT=NULL; //线程指针

pT=AfxBeginThread(ThreadProc,NULL,NULL,0,CREATE_SUSPENDED,NULL); //创建线程
pT->m_bAutoDelete=FALSE;
pT->ResumeThread();

//结束线程
if(pT!=NULL)
{
DWORD dwexitcode;
GetExitCodeThread(pT->m_hThread,&dwexitcode);
TerminateThread(pT->m_hThread,dwexitcode);
WaitForSingleObject(pT->m_hThread,INFINITE);
CloseHandle(pT->m_hThread);
delete pT;
pT=NULL;
}

这样似乎可以做到,不过这样似乎不是办法,而且更要命的是,调用几次TerminateThread之后,程序就彻底锁死了。这个我应该如何做呢?
说了这么一大堆,这不请求各位老大帮忙来了,小弟不胜感激啊!

作者: xiaokan168   发布时间: 2011-12-11

你别老terminate啊,让线程主动退出啊。

作者: jennyvenus   发布时间: 2011-12-11

线程自动退出必须要执行完才可以return,而我这个线程,必须想终止的时候就终止,不等待,有办法吗

作者: xiaokan168   发布时间: 2011-12-11

你那个耗时函数得重写,减少一次操作的时间。
或者你可以把耗时操作放到一个服务进程里去。

作者: jiangsheng   发布时间: 2011-12-11

耗时函数是别人接口里的,不能重写。
关于后者,能详细说说吗,谢谢。
引用 3 楼 jiangsheng 的回复:
你那个耗时函数得重写,减少一次操作的时间。
或者你可以把耗时操作放到一个服务进程里去。

作者: xiaokan168   发布时间: 2011-12-11

‘你那个耗时函数得重写,减少一次操作的时间’如:
switch(step)
{
case 1:
do1ststep();
step=2;
case 2:
do2ndstep();
step=3;
case 3:
。。。

作者: schlafenhamster   发布时间: 2011-12-11