我们如何在 C++ 中使用编年史语句进行循环?

-3 c++

我想知道我们如何制作一个循环(例如,while 循环),其中 while 循环内的语句是基于时间的。

更清楚地说,例如我想制作一个while循环,我将每10秒输入一次。

伪代码如下:

while (10 seconds have passed)
{
    //do Something
}
Run Code Online (Sandbox Code Playgroud)

那么,如何使上述伪代码成为现实呢?(我希望已经清楚了)

Gal*_*lik 5

我通常使用这样的东西:

// for an easier life
using clock = std::chrono::steady_clock;

// set the baseline time
auto timeout = clock::now();

for(;;)
{
    // (re)set timer
    timeout += std::chrono::seconds(10);

    // sleep until time has elapsed
    std::this_thread::sleep_until(timeout);

    // do something useful (like print the time)
    auto timer = std::time(0);
    std::cout << "loop: " << std::ctime(&timer) << '\n';
}
Run Code Online (Sandbox Code Playgroud)

通过使用std::this_thread::sleep_until()循环CPU,在等待10秒数过去时不会消耗时间。

这可以包含在一个整洁的小类中,如下所示:

class wait_timer
{
    using clock = std::chrono::steady_clock;

    clock::duration time_to_wait;
    clock::time_point timeout = clock::now();

public:
    wait_timer(std::chrono::milliseconds ms)
    : time_to_wait(ms), timeout(clock::now()) {}

    void wait()
    {
        timeout += time_to_wait; // (re)set timer
        std::this_thread::sleep_until(timeout);
    }
};

int main()
{
    // create it outside the loop so it doesn't
    // loose track of time every iteration
    wait_timer wt(std::chrono::seconds(2));

    for(;;)
    {
        wt.wait();

        // do something useful (like print the time)
        auto timer = std::time(0);
        std::cout << "loop: " << std::ctime(&timer) << '\n';
    }
}
Run Code Online (Sandbox Code Playgroud)