您的位置:首页 > 其它

线程状态切换 退出-暂停-继续

2012-10-05 22:10 260 查看
对于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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐