我想知道是否有办法计算c ++中的已用时间,而不会阻止执行,如果可能的话,可以避免线程。
情况:炸弹已经建立,需要在5秒后爆炸。我们可以避免创建一个线程,他会在爆炸前休息5秒然后自杀吗?
答案 0 :(得分:1)
您可以拥有非阻塞时间计数器,只需在执行常规操作时不时调用它。一旦超时 - 做你需要的。这样就不需要额外的线程。
#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();
}
答案 1 :(得分:1)
使用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*/)