WaitForSingleObject函数原型:
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
参数说明:
hHandle:是一个事件的句柄。
dwMilliseconds:是时间间隔。如果时间内是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。
WaitForSingleObject函数用来检测hHandle对象的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。
HANDLE对应的对象及这些对象状态对应的情况有:
Thread 线程:
当线程结束时,线程对象即被激发。当线程还在进行时,则对象处于未激发状态。
Process 进程:
当进程结束时,进程对象即被激发。当进程还在进行时,则对象处于未激发状态。
Change Notification:
当一个特定的磁盘子目录中发生一件特别的变化时,此对象即被激发。此对象系由 FindFirstChangeNotification() 产生。
Console Input :
当console 窗口的输入缓冲区中有数据可用时,此对象将处于激发状态。CreateFile ()和GetStdFile ()两函数可以获得console handle 。
Event 事件:
Event 对象的状态直接受控于应用程序所使用的三个 Win32 函数: SetEvent (), PulseEvent (), ResetEvent ()。 CreateEvent ()和 OpenEvent ()都可以传回一个 event object handle 。 Event 对象的状态也可以被操作系统设定——如果使用于“overlapped ”操作时。当Event激活时,WaitForSingleObject将会得到一个WAIT_OBJECT_0的值。
Mutex 互斥体:
如果mutex 没有被任何线程拥有,他就是处于激发状态。一旦一个等待mutex 的函数返回了,mutex 也就自动重置为未激发状态。CreateMutex ()和OpenMutex ()都可以获得一个 Mutext 的 handle 。
Semaphore 信号量 :
Semaphore 有点像mutex ,但他有个计数器,可以约束其拥有者(线程)的个数。当计数器内容大于0 时, semaphore 处于激发状态,当计数器内容等于0 时,semaphore 处于未激发状态。CreateSemaphore ()和OpenSemaphore()可以传回一个semaphore handle 。
Job:
暂时没搜到到内容。。。。。
Waitable timer计时:
如果计时的时间间隔到达时,他就处于激活状态。CreateWaitableTimer()传回一个Waitable timer handle。SetWaitableTimer(),如果SetWaitableTimer调用时waitable timer已经在计时中,则中止前面的计时,重新开始计时。这一过程不会使 waitable timer变成singled状态。只有当定时的间隔到时,waitable timer才会变成singled状态。CancelWaitableTimer ()中止waitable time对象的计时。