如何在每秒触发的循环中利用现有参数每5秒调用MyFunc()?
实现每5秒调用MyFunc()的条件写法
现有代码通过ts变量实现每秒触发一次逻辑,要在最小改动的前提下,仅用给定的ts和std::chrono::system_clock::now()两个参数实现每5秒调用一次MyFunc(),可以用以下两种等价的条件写法:
写法1:基于当前时间戳判断
将condition替换为:
std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count() % 5 == 0
写法2:基于ts变量判断
也可以直接用已有的ts变量做判断,结果完全一致:
std::chrono::duration_cast<std::chrono::seconds>(ts.time_since_epoch()).count() % 5 == 0
原理说明
每次进入ts <= std::chrono::system_clock::now()的分支时,当前时间刚好是整秒节点(因为ts每次递增1秒)。通过将时间转换为从纪元开始的秒数并对5取模,当结果为0时,就说明当前时刻是5秒的整数倍,此时调用MyFunc()就能保证严格的5秒间隔。
这种写法完全复用现有参数,不需要新增任何变量或修改原有逻辑结构,满足最小改动的要求。
内容的提问来源于stack exchange,提问作者Putin_Caput
相关产品推荐
相关产品推荐

