我已经实现了使用c ++客户端每10秒调用一次服务API的代码。大多数时候我都注意到它大概是10秒钟,但偶尔我会看到下面的问题看起来更长。我在wait_until上使用条件变量。我的实施有什么问题?有任何想法吗? 这是时序输出:
currentDateTime()=2015-12-21.15:13:21
currentDateTime()=2015-12-21.15:13:57
代码:
void client::runHeartbeat() {
std::unique_lock<std::mutex> locker(lock);
for (;;) {
// check the current time
auto now = std::chrono::system_clock::now();
/* Set a condition on the conditional variable to wake up the this thread.
This thread is woken up on 2 conditions:
1. After a timeout of now + interval when we want to send the next heartbeat
2. When the client is destroyed.
*/
shutdownHeartbeat.wait_until(locker, now + std::chrono::milliseconds(sleepMillis));
// After waking up we want to check if a sign-out has occurred.
if (m_heartbeatRunning) {
std::cout << "currentDateTime()=" << currentDateTime() << std::endl;
SendHeartbeat();
}
else {
break;
}
}
}
答案 0 :(得分:0)
您可能需要考虑使用high_resolution_clock来满足您的需求。 system_clock不能保证高分辨率,因此这可能是问题的一部分。
请注意,它的定义是依赖于实现的,因此您可能只是在某些编译器上将typedef返回到system_clock。