【发布时间】:2021-06-22 01:35:20
【问题描述】:
我正在 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");
接收者
当消息到达时,它会创建一个接收日志字符串并将其刷新到一个文件中。
auto& queueData = socket_.getQueue();
while (queueData.size() > 0)
{
auto str = queueData.dequeue();
logger_.log(",Receive" + str + "\n");
logger_.flush();
}
我已经测试了一夜,我不知道为什么会得到这个结果。
x 轴:Hour_Minute_second
y轴:微秒
几个小时后,它似乎按预期工作。但在那之后,时间逐渐改变,去了不同的时区。
有人知道为什么会这样吗?
【问题讨论】:
-
你真的应该使用
std::chrono::steady_clock来为这样的事情计时。系统时钟可能会定期更改,因为系统会尝试与 互联网时间 保持同步。我不知道这是否是您的问题,但它可能是相关的。
标签: c++ windows winsock chrono