Что на самом деле делает SetPriorityClass (REALTIME_PRIORITY_CLASS)? - PullRequest
2 голосов
/ 23 июля 2011

Что делает REALTIME_PRIORITY_CLASSTHREAD_PRIORITY_TIME_CRITICAL) на самом деле ?

Есть ли:

  • Предотвращение прерывания от срабатывания
  • Предотвращение переключения контекста

на процессоре (разве что нить спит)?

Если это предотвращает , то происходит:

  • Почему, когда я запускаю программу на процессоре с этим флагом, я все еще получаю противоречивые результаты синхронизации? Разве программа не должна занимать одинаковое количество времени каждый раз, если ничто не мешает ей?

Если это НЕ препятствует , то вышеописанное происходит:

  • Почему моя система (мышь, клавиатура и т. Д.) Блокируется, если я использую ее неправильно? Разве драйверы не получают процессорное время?

1 Ответ

0 голосов
/ 23 июля 2011

По сути, он сообщает системному планировщику только много времени вашему потоку, пока он не откажется от него (через Sleep или SwitchToThread) или умрет. Что касается того, что время не совпадает, ОС все еще работает в промежутке между каждым запуском, это может изменить оперативную память, кэширование и т. Д. Во-вторых, большая часть времени является неточной, поэтому она будет колебаться (особенно время, основанное на системных квантах, например GetTickCount). Во многих ОС тоже есть что-то, например, энергосбережение / динамическая регулировка частоты, поэтому лучше всего использовать RDTSC, хотя даже при этом вы можете заметить, что запущены другие компоненты (особенно если вы можете запустить более одного физического потока). ,

...