在 while 循环中使用两个时间值。当条件不再为 1 时,while 循环不会停止。C++

Using two time values in while loop. The while loop doesn't stop when condition no longer 1. C++

即使其中一个值变为 'greater than' 并且条件从 1 变为 0

我的 while 循环没有停止

在 while 循环开始之前,我现在以毫秒为单位设置时间。 milliseconds_now
我还设定了一个五秒后的时间。 milliseconds_then

我在 while 循环中有 (milliseconds_now < milliseconds_then)。它应该只有 1 五秒钟。我还在循环中打印出 (milliseconds_now < milliseconds_then),它在五秒后从打印“1”变为打印“0”。

我希望循环在五秒后停止。相反,它会继续。

这是我在 运行 五秒钟时在终端中看到的内容。它一直在循环。

1644097691885 1644097692070
1
1644097691935 1644097692070
1
1644097691986 1644097692070
1
1644097692036 1644097692070
1
1644097692086 1644097692070
0
1644097692136 1644097692070
0
1644097692186 1644097692070
0
1644097692236 1644097692070
0
1644097692287 1644097692070
0
1644097692337 1644097692070
0
1644097692387 1644097692070
0
1644097692437 1644097692070

代码。

#include <iostream>
#include <chrono>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;
using namespace std::chrono;

auto now = high_resolution_clock::now();
auto milliseconds_now = duration_cast<milliseconds>(now.time_since_epoch()).count();

auto milliseconds_then = milliseconds_now + 5000;
    
int main() {
    while (milliseconds_now < milliseconds_then) {

        auto now = high_resolution_clock::now();
        auto milliseconds_now = duration_cast<milliseconds>(now.time_since_epoch()).count();

        cout << milliseconds_now << " " << milliseconds_then << "\n";
        cout << (milliseconds_now < milliseconds_then) << "\n";

        usleep(50000);
    };
};

循环内的 milliseconds_now 与 while 循环中测试的 milliseconds_now 不同。改成

while (milliseconds_now < milliseconds_then) {

    auto now = high_resolution_clock::now();
    milliseconds_now = duration_cast<milliseconds>(now.time_since_epoch()).count();

    cout << milliseconds_now << " " << milliseconds_then << "\n";
    cout << (milliseconds_now < milliseconds_then) << "\n";

    usleep(50000);
};

为什么?你在循环内声明了一个新变量,编译器通常会警告你。