如何强制结束一个线程
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 );
}
那么如何强制结束一个线程?书上给出了一个例子,以后强制结束一个线程就靠它了。
程序片段:
//线程退出事件
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 );
}
相关文章推荐
- android 如何结束一个线程?
- 强制结束另外一个线程的办法
- java程序中,如何安全的结束一个正在运行的线程?interrupt()
- 如何立即结束一个线程?
- 如何结束一个线程
- 如何安全的结束一个正在运行的线程
- JAVA里面如何让一个线程死亡或结束
- 如何让一个线程死亡或结束
- .net C#线程连接Join的技巧,如何真正让一个线程结束,另外一个线程启动
- Android 如何监听一个线程的开始和结束
- java中,如何安全的结束一个正在运行的线程?
- Java—java中如何安全的结束一个正在运行的线程
- java程序中,如何安全的结束一个正在运行的线程?
- 强制结束一个线程
- JAVA里面如何让一个线程死亡或结束
- vb.net中如何结束一个线程
- JAVA里面如何让一个线程死亡或结束
- java程序中,如何安全的结束一个正在运行的线程?
- java中,如何安全的结束一个正在运行的线程?
- JAVA里面如何让一个线程死亡或结束