[Interest] Expected event execution order in this multi-thread application

Thiago Macieira thiago.macieira at intel.com
Mon Sep 30 21:40:23 CEST 2019


On Monday, 30 September 2019 08:05:23 PDT Ola Røer Thorsen wrote:
> man. 30. sep. 2019 kl. 16:48 skrev Thiago Macieira <
> 
> thiago.macieira at intel.com>:
> > It's just wrong to use it. Just like QThread::{,m,u}sleep. Don't use them.
> 
> What's wrong with the sleep functions in particular? Are they worse than
> calling for example unistd.h's "usleep" or
> "std::this_thread::sleep_for(std::chrono::milliseconds(x));"?

The problem with the sleep functions is that they sleep for an amount of time 
different than the actual amount of time that you needed to sleep for.

Note: *needed* to sleep for, not *coded* for. Pretty much any time span 
different from 0 is wrong in at least one circumstance: either you're sleeping 
too little, in which case you woke the system up early and are consuming CPU 
time and battery, or you slept too much and you delayed processing some 
incoming event. 

Usually, it's both: you wake up early, consume battery, handle no events, then 
go back to sleep. Then the event you needed to handle arrives while you're 
still sleeping.

Don't sleep with a timeout. Sleep until *exactly* your event arrives, no 
sooner and no later.

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel System Software Products





More information about the Interest mailing list