спать 100 мкс, спит 15 милисекунд
Ну у планировщика есть некая минимальная гранулярность, мб ты в нее уперся
Разрешение системного таймера ~15-16 миллисекунд. Уменьшить до ~1 миллисекунды можно timeBeginPeriod и timeEndPeriod. Но минимальное разрешение надо ещё через timeGetDevCaps узнавать. А ещё timeBeginPeriod по-разному работает на серверный и настольных версии windows. А если надо меньшее время, можно попробовать через busy wait цикл сделать и std::chrono::high_resolution_clock::now. Правда поток будет не спать, а впустую циклы процессора использовать.
Эээ... 15 милли?секунд ... ... Це ж трындец Так тогда другие потоки работать не смогут. Можно в целом через yield(или как он там пишется) их перешелкивать. Но ясно что таймер в винде - какой-то трындец
Будут офигительные истории, как линух спит микросекунды без глобальных настроек планировщика? А так - можно попробовать спать на high-res таймере
Запуск на десятке 20H2 или позднее?
Ну... там он спит где-то 200 с чем-то мкс, что всяко лучше виндовых 15 мс.
не за компом уже. Не помню чтл за версия там стоит
https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-createwaitabletimerexw См. флаги
Ну, в любом случае - welcome to club https://randomascii.wordpress.com/2020/10/04/windows-timer-resolution-the-great-rule-change/
С помощью этого объекта можно сделать так, чтобы поток выполнялся ~нужное количество раз в секунду?
Необходимость так делать в юзерспейсе в целом похоже на архитектурную ошибку, но попробовать можно)
О. А расскажите, между тем, как линуксовский планировщик разогнать
прочитать доку про sleep_for для начала
Предлагаю перейти сразу к окончанию
Никак. По определению никак. 20 ms твой предел.
Выше пишут что как. И не 20мс а меньше.
Мне остается только сказать "Вперед с флагами и песнями и строем с речевками".
ерунда. как по вашему игры работают? 😏 есть timeBeginPeriod до 1 ms, есть CreateWaitableTimer еще точнее
Ой, вот когда такое читаю, то даже не знаю, что ответить. На винде и в линухе можно сделать обработку чего со средней задержкой в наносекунды, но не того, о чем чел выше спрашивал.
Микросекунды никак - но вот сделать так чтобы точность таймера была ~1мс - можно.
Обсуждают сегодня