导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

如何立即结束一个正在工作的线程?

vcmfcjavabbs 2009-08-26 06:07:01
已知不建议用termiate方法结束一个线程,结束线程最了的办法是让线程自然返回,即线程函数中安排return语句。但是有时,我们要立即结束一个线程,请问用什么方法?是不是要一个全局变量bStop,在线程函数 中每一条语句前都要if(bStop == true),这样做好像不好,请问高手有什么好的方法一?
...全文
134 点赞 收藏 19
写回复
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
langzhiwang888 2009-08-27
学习了。terminatethread它有时也不好用啊
回复
TerminateThread
回复
zhengq06 2009-08-27
学习
回复
wish_cn 2009-08-27
最后别忘了CloseHandle。
回复
wish_cn 2009-08-27
一般是将设置退出标志位后用WaitForSingleObject等待,并且线程函数应该保证等待可以在有限时间内完成。
回复
对 terminatethread
回复
lygfqy 2009-08-27
一般的情况还是在循环里做判断的
直接退出不是好办法
回复
scguest 2009-08-27
用标志最好,如果在中途突然退出,除非你确认资源释放完,否则会导致内存泄露。
回复
bingo0717 2009-08-27
[Quote=引用 7 楼 heksn 的回复:]
while(bRun)


结束
bRun = FALSE;
[/Quote]

agree
回复
Sou2012 2009-08-27
[Quote=引用 15 楼 jennyvenus 的回复:]
TerminateThread

[/Quote]

UP!!
回复
reneeland 2009-08-27
最安全的办法是线程的循环体里面检查一个退出事件,此事件一触发就自己清除资源并return。
要通知此线程退出的模块就PostThreadMessage函数,将退出事件post给该线程。

hEventFinish = CreateEvent(NULL,TRUE,FALSE,NULL);//创建手工重置的Event对象

DWORD WINAPI DisplayData(LPVOID param)
{
while(TRUE)
{
if( WaitForSingleObject(pDlg->hEventFinish,0) == WAIT_OBJECT_0)
return 0; //让线程函数正常返回


//...DisplayData


}
return 0;
}



或者采用全局变量:
bool bExit;

void CTestView::OnButton7() //执行
{
DWORD dwThreadID;

bExit = false;

FThread=CreateThread(NULL,0,DisplayData,
(LPVOID )&x,CREATE_SUSPENDED,&dwThreadID);

ResumeThread(FThread);
}

DWORD WINAPI DisplayData(LPVOID param)
{

while(TRUE)
{

//...DisplayData

if(bExit)
ExitThread(0);

}
return 0;
}

void CTestView::OnButtonStop() //退出
{
bExit = true;
}
回复
reneeland 2009-08-27
我也是用termiate,我也知道这样不是很好,但貌似没有什么好的办法~~~
MARK一下~~~关注中~~~
回复
while(bRun)


结束
bRun = FALSE;
回复
用CloseHandle来做清理工作,TerminateThread貌似是最直接,有效的。
回复
BOOL WINAPI TerminateThread(
HANDLE hThread,
DWORD dwExitCode
);

回复
vcmfcjavabbs 2009-08-26
我不知道迅雷是怎么做到的。有没有好的办法啊。我现在的项目卡在这里了。
回复
greatws 2009-08-26
只有用标志去判断,我觉得没有其他办法
回复
ziplj 2009-08-26
也可以发送线程消息
回复
ziplj 2009-08-26
ExitThread 通过别的线程来结束
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……