读书人

怎样终止线程?该怎么解决

发布时间: 2012-02-23 22:01:35 作者: rapoo

怎样终止线程?
在居于对话框的应用程序中,我希望通过点击一个按钮启动一个线程(_beginthread),然后点击另一个按钮结束线程,我该怎么来结束线程?

[解决办法]
ExitThread不行的话用下面这个
TerminateThread
[解决办法]

一般用全局变量通讯,让线程函数自己退出。

比如,线程中判断一个布尔全局变量,如果为真就一直运行;

当这个变量为假就退出线程函数。

你只要改变这个全局布尔变量就可以了。
[解决办法]
如果强行结束程序的话可能会造成想不到的问题。
所以zaodt说得倒是不错的方法,但是对于时间要求比较严格的,可能还要想想怎么处理才好。
[解决办法]
使用event等阻塞函数.
[解决办法]
1.event阻塞函数

2. OnTimer

3.直接调用线程终止函数
[解决办法]
event阻塞函数 的效率比 全局变量的高
[解决办法]
OnTimer和全局变量比较好
[解决办法]
Win32核准的做法是在你的程序代码中设立一个标记,利用其值来要求线程结束自己。
这种方法的优点非常突出,就是可以保证目标线程在结束之前又安全而一致的状态。
做法是使用一个手动重置的event对象。
DWORD WINAPI ThreadFunc(LPVOID)
HANDLE hRequestExitEvent = false;

int main()
{
// here create you thread
CreateThread();
//do something

SetEvent(hRequestExitEvent); //here you want to stop you thread;

reutn EXIT_SUCCESS;
}

DWORD WINAPI ThreadFunc(LPVOID)
{
for()//there is a loop
{
//do something you want to
if(WaitForSingleObject(hRequestExitEvent,0)!=WAIT_TIMEOUT) //This is very important
{
RETURN (DWORD)-1;
}
}
RETURN (DWORD)1;
}

读书人网 >VC/MFC

热点推荐