Вы не согласились бы с этим кодом, поскольку точное измерение времени, которое требуется для выполнения кода, является сложной задачей.
Чтобы перейти к вопросу, заданному названием заголовка вопроса (вам действительно нужно задать один вопрос ввремя ...) точность указанных функций определяется операционной системой.В Linux гранулярность системных часов составляет 10 мс, поэтому гарантированное время приостановки процесса с помощью nanosleep () будет точно равным 10 мс, и даже в этом случае не гарантируется, что оно будет работать в течение именно того времени, которое вы укажете.(См. Ниже.)
В Windows гранулярность часов можно изменить для соответствия потребностям управления питанием (например, уменьшить гранулярность для экономии заряда батареи).См. MSDN документацию по функции Sleep .
. Обратите внимание, что при использовании Sleep () / nanosleep () ОС гарантирует, что приостановка процесса будет длиться не менее .пока вы указываете.Выполнение других процессов всегда может задержать возобновление вашего процесса.
Таким образом, событие key-up, отправляемое указанным выше кодом, будет отправлено как минимум на 2,638 секунды позже события key-down, а не на миллисекунду.рано.Но было бы возможно отправить событие через 2,7, 2,8 или даже через 3 секунды.(Или намного позже, если процесс в реальном времени захватил ЦП и некоторое время не отказывался от управления.)