WaitForSingleObject的详细用法
?在多线程的情况下,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects。这两个函数都会等待Object被标为有信号(signaled)时才返回的。 WaitForSingleObject() 1. 格式 DWORD WaitForSingleObject( HANDLE?hHandle,DWORDdwMilliseconds); 有两个参数,分别是THandle和Timeout(毫秒单位)。 如果想要等待一条线程,那么你需要指定线程的Handle,以及相应的Timeout时间。当然,如果你想无限等待下去,Timeout参数可以指定系统常量INFINITE。 2. 使用对象 它可以等待如下几种类型的对象: Event,Mutex,Semaphore,Process,Thread? 3. 返回类型 有三种返回类型: WAIT_OBJECT_0,表示等待的对象有信号(对线程来说,表示执行结束); ?WAIT_TIMEOUT,表示等待指定时间内,对象一直没有信号(线程没执行完); WAIT_ABANDONED 表示对象有信号,但还是不能执行 ?一般是因为未获取到锁或其他原因 代码例如下: // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "stdio.h" #include "windows.h" #include <iostream> using namespace std; int i = 0; DWORD WINAPI FunProc(LPVOID lpParameter); DWORD WINAPI FunProc(LPVOID lpParameter) { for (; i < 10; i++) { if (!(i % 10)) cout << endl; else cout << i << endl; } return 0; } void main() { cout << i << endl; HANDLE hThread; hThread = CreateThread(NULL,0,FunProc,NULL,0,NULL); DWORD dwRet = WaitForSingleObject(hThread,1); if (dwRet == WAIT_OBJECT_0) { cout<< "创建的线程执行结束" << endl; } if (dwRet == WAIT_TIMEOUT) { cout<< "等待超时" << endl; } if (dwRet == WAIT_ABANDONED) { cout<< "Abandoned" << endl; } CloseHandle(hThread); system("pause"); return 0; } 结果为: ? 这段代码中,首先在开始定义一个变量? i? 为? 0 ,然后在主函数中先将其输出便有了结果中第一行的? 0 。 之后我们开启线程,进入线程函数FunProc,在FunProc中将? i++ 对 10 取余输出,一直到 i > 10 结束循环,线程结束,这时返回给WaitForSingleObject的结果为WAIT_OBJECT_0,表示线程正常结束,并将结果输出。 这其中WaitForSingleObject的效果就相当于一个关卡,只有返回给了WaitForSingleObject结果程序才能继续执行。 这就是未能等到线程结束信号量的等待时间就耗光了。我们也可以将WaitForSingleObject的第二个参数设置为?INFINITE,就可以一直等待。结果为:
其它链接:WaitForSingleObject函数作用和用法 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- wpf调试错误输出System.WIndows.Data错误25
- CVE-2019-0708远程桌面代码执行漏洞复现
- Windows DFS如何为远离办公室的笔记本电脑工作?
- windows-server-2003 – 为什么Windows Server 2008磁盘访问
- windows-8 – 如何通过CLI或AHK在Windows 8中打开“设备和打
- Windows上的python select.select()
- windows – 漫游配置文件和配置文件重定向之间的区别
- Windows – (为什么)是FSCTL_SET_OBJECT_ID危险?
- Windows server 2016 搭建DHCP服务器
- active-directory – Windows 2008 R2 – 什么是定义可以将