mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 10:13:15 +02:00
do sleep timing off when next packet would have been
This commit is contained in:
parent
addde84bee
commit
1cd16da83e
1 changed files with 12 additions and 6 deletions
|
@ -280,11 +280,11 @@ void SendQueue::run() {
|
||||||
// Once we're here we've either received the handshake ACK or it's going to be time to re-send a handshake.
|
// Once we're here we've either received the handshake ACK or it's going to be time to re-send a handshake.
|
||||||
// Either way let's continue processing - no packets will be sent if no handshake ACK has been received.
|
// Either way let's continue processing - no packets will be sent if no handshake ACK has been received.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Keep an HRC to know when the next packet should have been
|
||||||
|
auto nextPacketTimestamp = p_high_resolution_clock::now();
|
||||||
|
|
||||||
while (_state == State::Running) {
|
while (_state == State::Running) {
|
||||||
// Record how long the loop takes to execute
|
|
||||||
const auto loopStartTimestamp = p_high_resolution_clock::now();
|
|
||||||
|
|
||||||
bool sentAPacket = maybeResendPacket();
|
bool sentAPacket = maybeResendPacket();
|
||||||
|
|
||||||
// if we didn't find a packet to re-send AND we think we can fit a new packet on the wire
|
// if we didn't find a packet to re-send AND we think we can fit a new packet on the wire
|
||||||
|
@ -304,9 +304,15 @@ void SendQueue::run() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// grab the current HRC timestamp
|
||||||
|
const auto now = p_high_resolution_clock::now();
|
||||||
|
|
||||||
|
// push the next packet timestamp forwards by the current packet send period
|
||||||
|
nextPacketTimestamp += std::chrono::microseconds(_packetSendPeriod);
|
||||||
|
|
||||||
// sleep as long as we need until next packet send, if we can
|
// sleep as long as we need until next packet send, if we can
|
||||||
const auto loopEndTimestamp = p_high_resolution_clock::now();
|
const auto timeToSleep = std::chrono::duration_cast<std::chrono::microseconds>(nextPacketTimestamp - now);
|
||||||
const auto timeToSleep = (loopStartTimestamp + std::chrono::microseconds(_packetSendPeriod)) - loopEndTimestamp;
|
|
||||||
std::this_thread::sleep_for(timeToSleep);
|
std::this_thread::sleep_for(timeToSleep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue