c++ 1ms定时器
时间: 2025-01-08 07:29:05 浏览: 3
在C++中实现1毫秒级别的定时器通常需要借助操作系统的API或者是第三方库,因为C++标准库本身并不直接提供这样的功能。这里我们可以使用Windows API中的`CreateWaitableTimer`函数,或者在跨平台环境下,如Linux上可以使用`std::chrono`库配合信号量或者条件变量。
以下是一个基于Windows API的简单示例:
```cpp
#include <windows.h>
// 创建定时器句柄
HANDLE hTimer = CreateWaitableTimer(NULL, TRUE, L"myTimer");
// 定义回调函数
LRESULT CALLBACK TimerProc(
PVOID lpParam,
BOOLEAN fTick)
{
// 当定时器触发时,此处执行你的代码
auto currentTime = GetTickCount64();
if (currentTime >= nextTimeout) {
// 设置下一次触发时间
SetWaitableTimer(hTimer, &nextTimeout, 1000, NULL, NULL, FALSE);
// 这里处理你的任务...
}
return true;
}
// 设置初始延时
const DWORD initialTimeout = 1000; // 1000ms
SetWaitableTimer(hTimer, &initialTimeout, 1000, NULL, TimerProc, TRUE);
// 然后在你需要的地方等待定时器触发
Sleep(INFINITE); // 或者其他异步操作
// 销毁定时器
CloseHandle(hTimer);
```
对于跨平台的情况,你可以使用`std::chrono`和`std::condition_variable`创建一个线程安全的定时器,例如:
```cpp
#include <iostream>
#include <thread>
#include <chrono>
#include <condition_variable>
class OneMillisecondTimer {
public:
void start() {
std::this_thread::sleep_for(std::chrono::milliseconds(1));
notify.notify_one(); // 触发回调
}
private:
mutable std::mutex mutex;
std::condition_variable notify;
};
int main() {
OneMillisecondTimer timer;
std::thread t([&]() { timer.start(); });
while (true) {
std::unique_lock<std::mutex> lock(mutex);
notify.wait(lock); // 当start被调用时唤醒
// 这里处理每1ms的任务...
}
t.join();
return 0;
}
```
阅读全文