Search code examples
c++windowswinsockc++-chrono

strange logging timestamp with chrono::sleep_until


I am testing application's latency during UDP communication on windows 10.

I tried to send a message every 1 second and receive a response sent immediately from the remote.

Send thread
It works every 1 second.

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_()
Send thread call this. just send message and make log string.

socket_.send(address_);

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

Receiver
When message arrives, it creates a receive log string and flushes it to a file.

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

    logger_.flush();
}

I've been testing it overnight and I can't figure out why I got this result.

chart for microseconds

x-axis : Hour_Minute_second
y-axis : microseconds

For a few hours it seemed to work as expected. But after that, the time gradually changed and went to a different time zone.

Does anyone know why this is happening?


Solution

  • std::chrono::steady_clock is working.
    It made my charts straight.

    And another way, turn off the windows automatically time synchronize.