您的位置:首页 > 其它

如何强制结束一个线程

2013-01-08 21:27 295 查看
WIN32多线程程序设计学习笔记(第四章 下 第五章)(原文名)
那么如何强制结束一个线程?书上给出了一个例子,以后强制结束一个线程就靠它了。

程序片段:

//线程退出事件

HANDLE hExitEvent = null ;

//一个需要长时间运行的线程

DWORD WINAPI ThreadFun ( LPVOID p )

{

for ( int I =0 ; I < 1000000; I++ )

{

//判断线程是否要被强制结束

/* 可能在这里大家有点疑惑,如果没有调用SetEvent()的方法,

hExitEvent不是总处于未激发状态吗?哪线程不就停在这里不动了?

答案是:这里用到了P74提到的一个Wait….()一个用法,当time_out

为0,检查hExitEvent的状态,如果hExitEvent处于未激发状态,

立刻返回WAIT_TIMEOUT,如果hExitEvent处于激发状态,则立刻

返回WAIT_OBJECT_0。*/

if ( WaitForSingleObject ( hExitEvent , 0 ) !=WAIT_TIMEOUT )

{

//做一些退出线程前的清理工作

return (DWORD) –1 ;

}

//做一些极其消耗时间的处理….

//…….

//……..

}

}

void main()

{

HANDLE hThrd;

//构造EVENT核心对象,初始状态处于未激发状态,Manual方式

hExitEvent = CreateEvent ( NULL,TRUE,FALSE,NULL ) ;

//线程启动

hThrd = CreateThread ( null,ThreadFun,…..);

//等待了很久,实在等不下去了,发出结束线程退出事件(激发EVENT核心对象)

//迫使线程结束

SetEvent ( hExitEvent ) ;

//等待线程结束

WaitForSingleObject (hThrd,… );

CloseHandle ( hThrd );

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: