C++ 如何每 10 秒检查一次时间?

标签 c++ time

我正在写一个检查点。每次运行循环时我都会检查。我认为这会浪费大量的 CPU 时间。我想知道如何每 10 秒检查一次系统时间?

time_t start = clock();
while(forever)
{
    if(difftime(clock(),start)/CLOCKS_PER_SEC >=timeLimit)
    {
        break;
    }
}

最佳答案

简短的回答是,如果您是新手程序员,这非常困难

现在有一些可能性:

  • 睡十秒钟。这意味着您的程序基本上毫无意义。

  • 使用alarm() 和信号处理程序。这很难做到正确,因为您不能在信号处理程序中做任何花哨的事情。

  • 使用 timerfd 并将时序逻辑集成到您的 I/O 循环中。

  • 为计时器设置一个专用线程(然后可以休眠);这非常困难,因为您需要考虑同步所有共享数据访问。

这里要强调的是,您的问题没有简单的解决方案。您需要将时序逻辑深入集成到您现有的程序流程中。此流程应该是某种“主循环”(例如,像 epoll_waitselect 这样的 I/O 多路复用循环),可能是多线程的,并且该循环应该启动计时器已触发的事实。

没那么容易。


这是一个切线,可能具有指导意义。基本上有两种计算机程序(除了所有其他类型):

一种是尽可能高效地执行一项特定任务然后完成的程序。例如,这类似于“生成 SSL key 对”或“查找文件中匹配 X 的所有行”。就程序流程而言,这些程序易于编写和理解。

另一种是与用户交互的程序。这些程序无限期地保持运行并响应用户输入。 (基本上是任何类型的 UI 或游戏,但也包括 Web 服务器。)从控制流的角度来看,这些程序将绝大部分时间用于...无所事事。他们只是闲着等待用户输入。所以当你考虑如何对此进行编程时,你如何让程序什么也不做?这是“主循环”的核心:它是一个循环,告诉操作系统让进程保持 sleep 状态直到发生一些有趣的事情,然后处理有趣的事件,然后再回到 sleep 状态。 p>

直到您了解如何什么都不做,您才能设计出第二种程序。

关于C++ 如何每 10 秒检查一次时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16142552/

相关文章:

c++ - 如何将 boost::gregorian::date 转换为 mm/dd/yyyy 格式,反之亦然?

JavaScript (Node.js)——从 MySQL 列中检索落后一天的日期

Java Clock 类没有给我当前时间

java - 如何将 RFC-1123 日期时间格式化程序转换为本地时间

c++ - For 循环增量器不能用作字符串 vector 的索引

c++ - 将字符串转换为十六进制数组数据

c++ - 具有 Y 类对象的 X 类,从 Y 中访问 X 的公共(public)变量

php - 将时间分成间隔

c++ - 为什么 cout 的访问冲突和 printf 的堆栈溢出

c++ cin 输入不起作用?