线程状态切换 退出-暂停-继续
对于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.