Windows的API,类似的还有WaitForMultipleObjects
以上两个api都是要等待Object被标记为有信号(signaled)才会return。windows中设置有信号量,信号量的作用简单理解为标志位。(比如文件的读写,当信号量为FALSE,表明未锁,任意线程可进行访问;否则,信号量为TRUE,则禁止其他线程进行访问)
使用场景:线程A, 线程B, 都要进行访问文件。线程A先行访问文件,线程B在等待。(此时线程B就在一个死循环中,一直尝试去打开文件,此死循环会占用大量内存),这种时候,就该利用到WaitForSingleObject了。
最强目的:WaitForSingleObject会让线程B在等待的过程中,进入一个超高效的沉睡等待状态,只占用极少的CPU时间片。
已上就是此API的强势讲解了。
接下来说一下使用方式。
格式:
DWORD WaitForSingleObject( HANDLE hHandle, DWORDdwMilliseconds);
有两个参数,分别是THandle和Timeout(毫秒单位)。
如果想要等待一条线程,那么你需要指定线程的Handle,以及相应的Timeout时间。当然,如果你想无限等待下去,Timeout参数可以指定系统常量INFINITE。
使用对象:
Event, Mutex, Semaphore, Process, Thread
返回类型:
WAIT_OBJECT_0, 表示等待的对象有信号(对线程来说,表示执行结束);
WAIT_TIMEOUT, 表示等待指定时间内,对象一直没有信号(线程没执行完);
WAIT_ABANDONED 表示对象有信号,但还是不能执行 一般是因为未获取到锁或其他原因