首页 > 解决方案 > 带有 chrono::sleep_until 的奇怪日志记录时间戳

问题描述

我正在 Windows 10 上的 UDP 通信期间测试应用程序的延迟。

我尝试每 1 秒发送一条消息,并立即收到从遥控器发送的响应。

发送线程
它每 1 秒工作一次。

auto start = std::chrono::system_clock::now();
unsigned int count = 1;
while (destroyFlag.load(std::memory_order_acquire) == false)
{

    if (isReady() == false)
    {
        break;
    }

    /*to do*/
    worker_();

    std::this_thread::sleep_until(start + std::chrono::milliseconds(interval_)* count++);
}

worker_()
发送线程调用这个。只需发送消息并制作日志字符串。

socket_.send(address_);

logger_.log("," + std::string("Send") + "\n");

Receiver
当消息到达时,它会创建一个接收日志字符串并将其刷新到一个文件中。

auto& queueData = socket_.getQueue();
while (queueData.size() > 0)
{
    auto str = queueData.dequeue();
    logger_.log(",Receive" + str  + "\n");

    logger_.flush();
}

我已经在一夜之间对其进行了测试,但我无法弄清楚为什么会得到这个结果。

微秒图表

x 轴:Hour_Minute_second
y 轴:微秒

几个小时后,它似乎按预期工作。但在那之后,时间逐渐变化,去了不同的时区。

有谁知道为什么会这样?

标签: c++windowswinsockchrono

解决方案


std::chrono::steady_clock 正在工作。
它使我的图表笔直。

还有一种方法,关闭windows自动时间同步。


推荐阅读