boost::ptime - реальные интервалы на разных системах, странная проблема с таймером под вендой |
Здравствуйте, гость ( Вход | Регистрация )
boost::ptime - реальные интервалы на разных системах, странная проблема с таймером под вендой |
Iron Bug |
20.3.2009, 13:12
Сообщение
#1
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
наверное, я тут соберу все возможные глюки систем пока я пишу свой проект!
какой-то очередной затык, на этот раз с таймерами... в результате экспериментов выползла весьма странная, на мой взгляд, проблема: написан тестовый бустовский поток, работающий с прерываниями (thread::interrupt()), c условными переменными (conditional_variable) в качестве синхронизации и с таймерами (timed_wait), работающими с этими переменными. в качестве временных интервалов для таймеров использовался позиксовский ptime, реализованный в бусте как часть date_time библиотеки. вообще, у меня была идея проверить совсем другие вещи, но в итоге получился такой интересный вывод про таймеры: запускаю тест дома под линюксом - минимальный интервал срабатывания timed_wait - примерно 50 микросекунд. при риал-тайм приоритете даже до 10 можно довести, а в худшем случае при загрузке системы - ну максимум 200 задержка может быть (это десктопный вариант дебиана с 26 ядром). а вот под вендой XP Pro на работе та же прога даёт минимальный интервал аж в 15625 микросекунд - и это вообще без нагрузки на систему! это что, такие тормоза системного таймера в венде или я чего-то недопонимаю в реализации??? может, ptime не самый быстрый таймер в бусте? (я использую microseconds интервалы). я понимаю, что венда - не риал-тайм система, но неужели всё настолько плохо или это всё-таки реализация подводит? копалась в сети, вот чел на ту же самую проблему напоролся: http://www.nabble.com/-date_time--Timer-an...td21884194.html видимо, всё-таки проблема в реализации... |
|
|
Iron Bug |
20.3.2009, 14:44
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
м-дя... что-то совсем грустно, что нет единого решения для такой нехитрой задачи, как обычный таймер. так хотелось сделать общую софтину без ifdef'ов и всяких ухищрений машинно- и системно-зависимых...
умилил вопрос в статейке: Why would you be interested in obtaining the system time with a resolution below one millisecond? блин, у меня в рабочих машинах миллисекунда - это целая вечность, а за 10 миллисекунд вообще физические девайсы могут поломаться, если вовремя не отловить и не обработать критическое событие... определённо, венда - не RT система: на уровне драйверов я наблюдала задержки вызова обработки немаскируемых прерываний до 200 микросекунд, теперь вот это ракообразие реализации системного таймера на верхнем уровне... придётся сесть и написать отдельный модуль с таймером для венды. но всё-таки интересно узнать, что об этом разработчики буста думают. в багах у них нет такого пункта. но 15-миллисекундный квант в реализации таймеров для потоков - это если и не бага, то просто ужоснах какой-то. вполне возможно, что имеет смысл доработка буста в этом плане, тем более, что она возможна. |
|
|
Текстовая версия | Сейчас: 29.11.2024, 13:22 |