Я усвоил трудный путь, что по крайней мере в MS Visual Studio (пробовал 2013 и 2015 годы) существует огромная разница между
boost::this_thread::sleep(boost::posix_time::microseconds(SmallIterval));
и
boost::this_thread::sleep_for(boost::chrono::microseconds(SmallIterval));
or
std::this_thread::sleep_for(std::chrono::microseconds(SmallIterval));
когда интервал меньше некоторого довольно существенного порога (я видел порог в 15000 микросекунд = 15 миллисекунд).
Если SmallIterval маленький, sleep () делает мгновенное прерывание. сон (100 мкс) ведет себя как сон (0 мкс).
Но sleep_for () для интервала времени, меньшего порога, делает паузу для всего порога. sleep_for (100 мкс) ведет себя как sleep_for (15000 мкс).
Поведение для интервалов, превышающих пороговое значение, и для значения 0 одинаково.