170 похожих чатов

Товарищи. Как принудить винду спать через sleep_for в микросекундах? Прошу

спать 100 мкс, спит 15 милисекунд

20 ответов

38 просмотров

Ну у планировщика есть некая минимальная гранулярность, мб ты в нее уперся

Разрешение системного таймера ~15-16 миллисекунд. Уменьшить до ~1 миллисекунды можно timeBeginPeriod и timeEndPeriod. Но минимальное разрешение надо ещё через timeGetDevCaps узнавать. А ещё timeBeginPeriod по-разному работает на серверный и настольных версии windows. А если надо меньшее время, можно попробовать через busy wait цикл сделать и std::chrono::high_resolution_clock::now. Правда поток будет не спать, а впустую циклы процессора использовать.

S.E.- Автор вопроса
Дмитрий 🎮
Разрешение системного таймера ~15-16 миллисекунд. ...

Эээ... 15 милли?секунд ... ... Це ж трындец Так тогда другие потоки работать не смогут. Можно в целом через yield(или как он там пишется) их перешелкивать. Но ясно что таймер в винде - какой-то трындец

Будут офигительные истории, как линух спит микросекунды без глобальных настроек планировщика? А так - можно попробовать спать на high-res таймере

Запуск на десятке 20H2 или позднее?

S.E.- Автор вопроса
Dmitriy [Отпуск]
Будут офигительные истории, как линух спит микросе...

Ну... там он спит где-то 200 с чем-то мкс, что всяко лучше виндовых 15 мс.

S.E.- Автор вопроса
Aliaksandr Onishchuk
Запуск на десятке 20H2 или позднее?

не за компом уже. Не помню чтл за версия там стоит

S.E.
Ну... там он спит где-то 200 с чем-то мкс, что вся...

https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-createwaitabletimerexw См. флаги

S.E.
не за компом уже. Не помню чтл за версия там стоит

Ну, в любом случае - welcome to club https://randomascii.wordpress.com/2020/10/04/windows-timer-resolution-the-great-rule-change/

Dmitriy [Отпуск]
https://learn.microsoft.com/en-us/windows/win32/ap...

С помощью этого объекта можно сделать так, чтобы поток выполнялся ~нужное количество раз в секунду?

Дмитрий 🎮
С помощью этого объекта можно сделать так, чтобы п...

Необходимость так делать в юзерспейсе в целом похоже на архитектурную ошибку, но попробовать можно)

S.E.- Автор вопроса
Dmitriy [Отпуск]
Будут офигительные истории, как линух спит микросе...

О. А расскажите, между тем, как линуксовский планировщик разогнать

прочитать доку про sleep_for для начала

S.E.- Автор вопроса
Boris Usievich
прочитать доку про sleep_for для начала

Предлагаю перейти сразу к окончанию

Никак. По определению никак. 20 ms твой предел.

S.E.- Автор вопроса
S.E.
Выше пишут что как. И не 20мс а меньше.

Мне остается только сказать "Вперед с флагами и песнями и строем с речевками".

Viktor Chyzhdzenka
Никак. По определению никак. 20 ms твой предел.

ерунда. как по вашему игры работают? 😏 есть timeBeginPeriod до 1 ms, есть CreateWaitableTimer еще точнее

Boris Usievich
ерунда. как по вашему игры работают? 😏 есть timeBe...

Ой, вот когда такое читаю, то даже не знаю, что ответить. На винде и в линухе можно сделать обработку чего со средней задержкой в наносекунды, но не того, о чем чел выше спрашивал.

Микросекунды никак - но вот сделать так чтобы точность таймера была ~1мс - можно.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта