WaitForSingleObject等待的时间精度测试

本文通过实际测试展示了WaitForSingleObject函数的等待时间精度可达毫秒级别,并提供了使用高精度定时器统计的具体数值结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WaitForSingleObject等待的时间精度小余0.1毫秒,即可视为其精度至少能达到毫秒级


10毫秒,用高精度定时器统计后的时间值如下:

10.145

9.98095

10.0015

10.0236

9.93212

10.0002

9.99277

10.0223

10.0149

9.98095

9.99961

9.99308

### WinAPI WaitForSingleObject 等待线程退出 #### 使用方法 `WaitForSingleObject` 是 Windows API 中的一个重要函数,用于等待指定对象进入信号状态。对于线程而言,该函数可以用来等待某个线程的结束。此函数接受两个参数:第一个是要监视的对象句柄;第二个是指定的最大等待时间(毫秒)。如果设置为 `INFINITE` 则表示无限期等待直到目标事件发生[^2]。 #### 示例代码 下面展示了一个简单的 C++ 实现例子,在其中创建一个新的工作线程并通过调用 `WaitForSingleObject` 来等待其完成: ```cpp #include <windows.h> #include <stdio.h> DWORD WINAPI ThreadFunc(LPVOID lpParam) { printf("子线程正在运行...\n"); Sleep(2000); // 模拟耗时操作 printf("子线程已完成。\n"); return 0; } int main() { HANDLE hThread; DWORD threadId; // 创建新线程 hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, NULL, 0, &threadId); if (hThread == NULL){ printf("CreateThread failed (%d)\n", GetLastError()); return 1; } // 等待线程结束 WaitForSingleObject(hThread, INFINITE); // 清理资源 CloseHandle(hThread); printf("主线程继续执行。\n"); return 0; } ``` 这段程序首先定义了一个名为 `ThreadFunc` 的函数作为新的线程入口点。接着通过 `CreateThread()` 函数启动这个新线程,并保存返回的手柄到变量 `hThread` 中以便后续使用。之后调用了 `WaitForSingleObject()` 方法来暂停当前进程直至所关联的工作线程完成为止。最后关闭了不再需要的手柄以释放系统资源[^5]。 #### 解释 在这个案例里,当主应用程序到达 `WaitForSingleObject(hThread, INFINITE)` 这一行的时候会暂时停止进一步向下执行任何指令,而是持续监测由 `CreateThread()` 返回的那个手柄代表的状态变化情况。一旦被监控的目标——即这里指代的新建线程结束了它的生命周期,则原先处于挂起态下的 `WaitForSingleObject()` 调用就会恢复控制权给调用者,允许后面的语句得以正常顺序执行下去[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不二星空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值