我想知道是否有一种方法可以在 C++ 中计算经过的时间,而不会阻塞执行,并且如果可能的话避免线程。
情况:制造了一颗炸弹,需要在 5 秒后爆炸。我们能否避免创建一个线程会在爆炸前休眠 5 秒然后自杀?
我想知道是否有一种方法可以在 C++ 中计算经过的时间,而不会阻塞执行,并且如果可能的话避免线程。
情况:制造了一颗炸弹,需要在 5 秒后爆炸。我们能否避免创建一个线程会在爆炸前休眠 5 秒然后自杀?
您可以拥有非阻塞时间计数器,只需在执行例行操作的过程中不时调用它。只要有超时 - 做你需要的。这种方式不需要额外的线程。
#include <ctime>
// start counter with current second
time_t counter = time(0);
// we need to wait 5 seconds
time_t timeout = 5;
bool exit = false;
void handle_timeout()
{
exit = true;
}
void func()
{
while(!exit)
{
// do something
if (time(0) - counter > timeout)
handle_timeout();
// yeild() or sleep(0) can be put here, to avoid 100% cpu load in case of high load
}
}
int main()
{
func();
}
使用std::chrono
您可以通过以下方式使用非阻塞计时器
在所需的时间测量开始时调用它:
std::chrono::steady_clock::time_point begin_time = std::chrono::steady_clock::now();
在所需的时间测量结束时调用它:
std::chrono::steady_clock::time_point end_time = std::chrono::steady_clock::now();
计算经过的时间:
std::chrono::steady_clock::time_point elapsed = end_time - begin_time;
如果需要较低的分辨率,例如几分钟或几小时,std::chrono
可以使用std::chrono::steady_clock::minutes(/*num minutes*/)
或`std::chrono::steady_clock::hours(/*num hours*/)