C++ 简单的计时器/刻度函数

Posted

技术标签:

【中文标题】C++ 简单的计时器/刻度函数【英文标题】:C++ simple timer/tick function 【发布时间】:2014-07-26 22:33:02 【问题描述】:

正如标题所说,我想创建一个简单的计时器/滴答功能,例如 5 分钟,这样我就可以调用另一个功能,然后计时器再次启动,依此类推,但不使用睡眠或时钟功能。那么是否有任何功能或方法可以例如以秒为单位计数?感谢您的帮助。

【问题讨论】:

sleep 有什么问题?这是你真正想做的事情,还是编码难题? “不使用睡眠或时钟功能”:如果没有时钟,您将如何测量 5 分钟? std::thread + std::chrono 这里应该够用了。 我试过睡眠,但它完全暂停了程序,这不好也尝试了倒计时 int 但我想要一些“实时”的东西,因为你知道每个系统计数更快或更慢,我还尝试了一些具有时钟功能的东西,它运行良好,但我不知道我觉得它不是很“清晰”的编码它应该适用于 windows 所以你说时钟功能没问题? 如果使用正确,是的:在您的问题中显示您的计时器代码(带有时钟)以获得准确的答案。 【参考方案1】:

虽然您说要避免“时钟功能”,但我不明白如何在没有时钟的情况下计算 5 分钟。这是一个非常基本但便携的计时器。

std::thread 用于创建线程 std::chrono 用作时钟

结果foo() 方法每 5 分钟调用一次。


#include <thread>
#include <iostream>

void foo()

    std::cout << "Hello !\n";   


int main()

    std::thread([&]
    
        while(true)
        
            // Wait 5 minutes
            std::this_thread::sleep_for(std::chrono::minutes(5));
            // Call our method
            foo();
        
    ).detach();

    // Execution continues ...
    std::cin.get();


注意事项:

我将 lambda 传递给线程,但任何可调用对象都可以。 std::chrono 有很多很酷的东西来控制日期和时间,你可以很容易地用它来调整你的计时器。

【讨论】:

以上是关于C++ 简单的计时器/刻度函数的主要内容,如果未能解决你的问题,请参考以下文章

C++ 跨平台高分辨率计时器

定时器实现原理——时间轮

定时器实现原理——时间轮

C++实现一个简单的计时器

一个时钟

在 C++ 中使用超时处理程序实现计时器