如何强制结束一个线程

出处:CSDN 作者: chinani

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 );

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值