MobileMan » 14 апр 2005, 01:38
Постановка вопроса:
"Разрабатывается программа под ОС Windows 2000. Одним из её элементов является замер времени выполнения определённых фрагментов кода. Есть функция для снятия показаний системного таймера. Эти функция вызывается в начале процесса замера и по его окончании. Вот тут и возникает проблема. Замеренное время больше реального времени выполнения этого фрагмента кода. И дело тут вот в чём: как известно, Windows - многозадачная ОС, поэтому в какие-то моменты процесс (для которого производится замер) снимается с процессора, и на процессоре выполняется другой процесс (например, какой-нибудь системный), потом наш процесс возвращается на процессор. В результирующее время попадают те интервалы времени, в которые на процессоре находятся посторонние процессы. Выход представляется таким: снимать показания системного таймера перед снятием с процессора и после постановки на процессор нашего процесса, и исключать продолжительность этих промежутков из общего времени. Вот только как отловить моменты, в которые происходит снятие с процессора и постановка на процессор нашего процесса. Может Windows посылает какое-нибудь сообщение процессу, типа: "Вот ты сейчас будешь снят" и "Сейчас ты вернёшься на процессор". Но какие это сообщения мне неизвестно. Есть версия, что эта информация относится к недокументированным возможностям Windows."
Буду очень благодарен всем тем, кто сможет предложить разумные идеи для решения поставленной проблемы. Особо отличившихся угощу пивком!!
Всем заранее спасибо!!
[b]Постановка вопроса:[/b]
"Разрабатывается программа под ОС Windows 2000. Одним из её элементов является замер времени выполнения определённых фрагментов кода. Есть функция для снятия показаний системного таймера. Эти функция вызывается в начале процесса замера и по его окончании. Вот тут и возникает проблема. Замеренное время больше реального времени выполнения этого фрагмента кода. И дело тут вот в чём: как известно, Windows - многозадачная ОС, поэтому в какие-то моменты процесс (для которого производится замер) снимается с процессора, и на процессоре выполняется другой процесс (например, какой-нибудь системный), потом наш процесс возвращается на процессор. В результирующее время попадают те интервалы времени, в которые на процессоре находятся посторонние процессы. Выход представляется таким: снимать показания системного таймера перед снятием с процессора и после постановки на процессор нашего процесса, и исключать продолжительность этих промежутков из общего времени. Вот только как отловить моменты, в которые происходит снятие с процессора и постановка на процессор нашего процесса. Может Windows посылает какое-нибудь сообщение процессу, типа: "Вот ты сейчас будешь снят" и "Сейчас ты вернёшься на процессор". Но какие это сообщения мне неизвестно. Есть версия, что эта информация относится к недокументированным возможностям Windows."
[b]Буду очень благодарен всем тем, кто сможет предложить разумные идеи для решения поставленной проблемы. Особо отличившихся угощу пивком!! :D
Всем заранее спасибо!![/b]