线程状态切换 退出-暂停-继续
2012-10-05 22:10
260 查看
对于SuspendThread函数的没有真正理解清楚.直到最近使用多线程执行任务的时候,发现有时候使用它比额外使用内核对象来更加方便.
这里简单使用这两个函数来完成线程的运行-中断-继续的状态切换.
核心编程中关于如何完全终止线程问题做出了一些引导:让我们尽量实现线程自己退出,而不是使用Windows那些逼不得已的函数.
代码大概的意思是:
这样我们可以使用hEvent来控制线程的暂停,继续,和退出.这样总体来讲
这种写法主要的问题有:
1. 整个线程执行体都在while里面,但初始化代码不能放在while,现在的解决方案可能把初始化代码加到while的前面,这样唯一的问题在于无法掌控初始化代码的状态.
2. 线程在控制的时候并不能达到”暂停”的目地,因为需要我们去手动保存当前的状态,等到hEvent变成可触发状态时,再继续(整个过程完全由我们自己来控制),实际上我们可以使用SuspendThread.
DWORD WINAPI ThreadProc( PVOID pvParament ) { int iCnt = 0; while ( 1 ) { cout<<iCnt<<endl; if ( iCnt > 10000 ) { break; } ++iCnt; } return 0; } void main() { bool bExit = FALSE; HANDLE hThread = CreateThread( NULL,0,ThreadProc,NULL,0,NULL ); Sleep( 2000 ); SuspendThread( hThread ); Sleep( 2000 ); ResumeThread( hThread ); WaitForSingleObject( hThread,INFINITE ); CloseHandle( hThread ); }
这里简单使用这两个函数来完成线程的运行-中断-继续的状态切换.
核心编程中关于如何完全终止线程问题做出了一些引导:让我们尽量实现线程自己退出,而不是使用Windows那些逼不得已的函数.
代码大概的意思是:
DWORD WINAPI ThreadProc( PVOID pvParament ) { while( WaitForSingleObject( hEvent,INFINITE ) == WAIT_OBJECT_0 ) { //循环做一些操作.循环里面保存当前状态. } return 0; }
这样我们可以使用hEvent来控制线程的暂停,继续,和退出.这样总体来讲
这种写法主要的问题有:
1. 整个线程执行体都在while里面,但初始化代码不能放在while,现在的解决方案可能把初始化代码加到while的前面,这样唯一的问题在于无法掌控初始化代码的状态.
2. 线程在控制的时候并不能达到”暂停”的目地,因为需要我们去手动保存当前的状态,等到hEvent变成可触发状态时,再继续(整个过程完全由我们自己来控制),实际上我们可以使用SuspendThread.
相关文章推荐
- 线程基础知识-产生、退出、状态切换
- 做一个计时器示例 在页面上有一个文本框和一个普通按钮 在状态栏上显示,单击按钮,开始计时的提示信息 单击按钮时,在文本框显示计数的过程,同时要求按钮上的字,显示为“单击暂停” 此时单击按钮,暂停计时,同时按钮上的字显示为“继续计时”,要求这两种状态来回切换,来完成计数器的功能
- 关于android 线程切换运行和停止状态
- Java线程的5种状态及切换
- MFC下暂停、继续、结束AfxBeginThread开启的线程
- 线程暂停与继续
- [POSIX线程模型]_[使用pthread对工作线程进行简单控制-暂停-继续-停止]
- 解决浏览器多标签非激活状态下线程暂停(JS脚本等暂停)问题
- iOS开发—线程的模拟暂停和继续操作
- 如何做到当某线程拿不到锁时不继续等待立刻退出?
- QueueUserAPC()强制线程退出等待状态
- Java线程的5种状态及切换
- 猎豹MFC--进程和线程--创建线程AfxBeginThread() SetDlgItemInt()线程暂停继续终止
- Java 线程暂停与继续
- Monitor线程操作(当一个线程中处于等待状态时,另外一个线程来解锁它的等待状态继续执行下去)
- 主程序运行完了,但是不想他退出,有子线程要继续运行
- Java线程暂停一段时间之后继续执行的实现方法
- 【unity】暂停,继续游戏,重新开始,退出
- QT 线程暂停,继续执行的一种实现(有些道理,而且封装了)
- Java线程的暂停与继续