2

我想知道是否有一种方法可以在 C++ 中计算经过的时间,而不会阻塞执行,并且如果可能的话避免线程。

情况:制造了一颗炸弹,需要在 5 秒后爆炸。我们能否避免创建一个线程会在爆炸前休眠 5 秒然后自杀?

4

2 回答 2

2

您可以拥有非阻塞时间计数器,只需在执行例行操作的过程中不时调用它。只要有超时 - 做你需要的。这种方式不需要额外的线程。

#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();
}
于 2013-04-30T14:36:10.630 回答
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*/)

于 2013-04-30T15:05:55.047 回答