Exe*_*1ve 14 c++ timer visual-c++
我正在用c ++编写一个程序,我需要定期调用一个函数,比如每10ms左右.我从来没有做过与c ++中的时间或时钟相关的任何事情,这是一个快速简单的问题还是没有简洁解决方案的问题之一?
谢谢!
use*_*498 16
一个简单的计时器可以实现如下,
#include <iostream>
#include <chrono>
#include <thread>
#include <functional>
void timer_start(std::function<void(void)> func, unsigned int interval)
{
std::thread([func, interval]() {
while (true)
{
func();
std::this_thread::sleep_for(std::chrono::milliseconds(interval));
}
}).detach();
}
void do_something()
{
std::cout << "I am doing something" << std::endl;
}
int main() {
timer_start(do_something, 1000);
while(true);
}
Run Code Online (Sandbox Code Playgroud)
这个简单的解决方案不提供停止计时器的方法.计时器将继续运行,直到程序退出.
flo*_*eng 11
要完成此问题,可以轻松调整@ user534498中的代码以使其具有周期性的滴答间隔.只需要确定定时器线程循环的开始时间和sleep_until执行该函数后的那个时间点的下一个开始时间点.
#include <iostream>
#include <chrono>
#include <thread>
#include <functional>
void timer_start(std::function<void(void)> func, unsigned int interval)
{
std::thread([func, interval]()
{
while (true)
{
auto x = std::chrono::steady_clock::now() + std::chrono::milliseconds(interval);
func();
std::this_thread::sleep_until(x);
}
}).detach();
}
void do_something()
{
std::cout << "I am doing something" << std::endl;
}
int main()
{
timer_start(do_something, 1000);
while (true)
;
}
Run Code Online (Sandbox Code Playgroud)