elete:从内存中删除线程对象的标志。
9.3.3 线程的管理和cāo作
1.线程的挂起、继续和休眠
(1)挂起
如果一个正在执行的线程用完了自己的时间片,则这个线程将会被挂起,并将CPU 时间
分给其他等待的线程。也可以通过调用Win32 API 函数SuspendThread 来挂起一个正在执行
的线程,如果调用成功,返回线程上一次的挂起计数,否则返回-1。SuspendThread 的函数原
型如下:
DWORD SuspendThread(
HANDLE hThread
);
函数中主要参数的意义如下。
? hThread:线程的句柄。
MFC 将线程cāo作进行了封装,CWinThread 的对象可以调用它的成员函数SuspendThread
来挂起一个正在执行的线程。
枫叶文学网www.fywxw.com
第9 章 多线程
·213·
(2)继续
如果继续执行SuspendThread 挂起的线程,或者在执行时采用CREATE_SUSPENDED 标
记创建的线程,可以调用函数RescomThread,将当前被挂起的线程的挂起计数减一。如果一
个线程的挂起计数减为0,则线程开始继续执行。如果调用成功,返回线程上一次的挂起计
数,否则返回0xFFFFFFFF。如果返回值为0,则说明当前线程并没有挂起。如果返回1,说
明线程被挂起,现在开始继续执行。RescomThread 的函数原型如下:
DWORD RescomThread( );
(3)休眠
函数Sleep 可以让当前执行的线程休眠一段时间,而函数SleepEx 将线程挂起,等待下
列事件之一发生。
? 一个I/O 回调函数被调用。
? 线程需要调用一个异步的过程。
? 时间间隔到。
它们的函数原型如下:
VOID Sleep(
DWORD dwMilliseconds
);
函数中主要参数的意义如下。
? dwMilliseconds:休眠时间。
DWORD SleepEx(
DWORD dwMilliseconds,
BOOL bAlertable
);
函数中主要参数的意义如下。
? dwMilliseconds:超时间隔。
? bAlertable:指定函数是否依赖I/O 回调函数结束。
如果指定的时间间隔期满,则返回0。如果函数返回依赖于一个或多个I/O 回调函数则
返回WAIT_IO_COMPLETION,这种情况只有bAlertable 为TRUE 的时候才会发生。
2.线程的优先级
(1)级别
Windows 允许用户在线程执行的过程中动态地得到或者改变线程的优先级,使重要的线
程可以优先执行,占有较多的时间片。该过程可以通过调用Win32 API 函数SetThreadPriority