c++定时器
时间: 2023-06-29 17:14:32 浏览: 193
在C++中,可以使用计时器(timer)来实现定时器的功能。常用的实现方式有以下几种:
1. 使用C++11中的<chrono>头文件
该头文件中提供了高精度计时的类和函数,可以用于实现定时器功能。例如,以下代码实现了一个一秒钟的定时器:
```
#include <iostream>
#include <chrono>
#include <thread>
int main()
{
auto start = std::chrono::steady_clock::now();
while (true)
{
auto end = std::chrono::steady_clock::now();
auto diff = end - start;
if (std::chrono::duration_cast<std::chrono::seconds>(diff).count() >= 1)
{
std::cout << "One second passed." << std::endl;
start = end;
}
}
return 0;
}
```
2. 使用Windows API中的SetTimer函数
SetTimer函数是Windows API中的一个函数,可以用于创建一个定时器。例如,以下代码实现了一个每隔一秒钟输出一次的定时器:
```
#include <iostream>
#include <Windows.h>
void CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
std::cout << "One second passed." << std::endl;
}
int main()
{
SetTimer(NULL, 0, 1000, TimerProc);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
```
3. 使用第三方库
除了上述两种方式,还可以使用第三方库来实现定时器功能。例如,Boost库中提供了定时器的实现,可以方便地使用。以下是一个使用Boost库的定时器的示例:
```
#include <iostream>
#include <boost/asio.hpp>
void TimerHandler(const boost::system::error_code& ec)
{
if (!ec)
{
std::cout << "One second passed." << std::endl;
}
}
int main()
{
boost::asio::io_context io;
boost::asio::steady_timer timer(io, boost::asio::chrono::seconds(1));
timer.async_wait(TimerHandler);
io.run();
return 0;
}
```
以上是几种常用的C++定时器实现方式,您可以根据自己的实际需求进行选择。
阅读全文