计算在c ++中经过的时间,非阻塞,没有线程

时间:2013-04-30 14:21:18

标签: c++ multithreading sleep

我想知道是否有办法计算c ++中的已用时间,而不会阻止执行,如果可能的话,可以避免线程。

情况:炸弹已经建立,需要在5秒后爆炸。我们可以避免创建一个线程,他会在爆炸前休息5秒然后自杀吗?

2 个答案:

答案 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::chronostd::chrono::steady_clock::minutes(/*num minutes*/)调整`std::chrono::steady_clock::hours(/*num hours*/)