В принципе вопрос в теме.
У меня есть WinXP приложение.
Мне нужно вызывать некоторую функцию с частотой 2000 раз в секунду (т.е. на подобе прерывания по таймеру).
Сообщения WM_TIMER неподходят по определению.
Есть ли какой способ под WinXp реализовать это?
Буду благодарен за любую помощь.
Здравствуйте, Slepchenkov, Вы писали:
S>У меня есть WinXP приложение.
S>Мне нужно вызывать некоторую функцию с частотой 2000 раз в секунду (т.е. на подобе прерывания по таймеру).
Можете, конечно, побаловаться с Waitable Timers, там время задается в 100-наносекундных интервалах, но только зря потратите время. Единственный способ обеспечить точность такого порядка в user-mode — это поднять приоретет потока и крутить цикл
без ожидания, отмеряя время посредством TSC или QueryPerformanceCounter. Разумеется, накладные расходы это создаст дикие, поэтому на однопроцессорной машине работать будет только этот поток, и практически ничего больше.
А если Вы из этого потока попытаетесь работать с файлами/окнами и другими сложными объектами — готовьтесь к паузам в единицы, а то и десятки миллисекунд.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
S>Есть ли какой способ под WinXp реализовать это?
WinXP не real-time OS. Вам в QNX
Здравствуйте, Евгений Музыченко, Вы писали:
[]
ЕМ>накладные расходы это создаст дикие, поэтому на однопроцессорной машине работать будет только этот поток, и практически ничего больше.
Планировщик будет временами останавливать этот поток на несколько квантов, так что гарантировать 2000 раз в секунду нереально.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth