Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Некоректная работа функции Sleep  (Прочитано 8228 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
MVI
Гость
« : 27-04-2005 09:43 » 

Привет всем!
Столкнулся со следующей проблемой. При задании предположим Sleep(5) на одних машинах происходит задержка 5мс, на других 10мс, на третих 16мс.
Причем 2000 Professional всегда работает коректно ,на  XP  - по разному  5мс и 10мс. А на 2000 Server - всегда 16 мс. Изменяя время ожидания,экспериментальным
путем определил, что существует дискретная величина отсчета времени. На одних машинах она установлена в 1, на других в 10 или 16.
Sleep(4)         4     ---     10     --    16
Sleep(5)         5     ---     10     --    16
Sleep(12)      12     ---     20     --    16
Sleep(22)      22     ---     30     --    32
Sleep(60)      60     ---     60     --    64
Может кто-то знает где находится эта дискретная величина и как ее устанавливать?
Заранее благодарен. Юра .

Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 27-04-2005 09:56 » 

Никто не гарантировал, что Sleep будет пробуждать поток СТРОГО по истечении указанного интервала.  Sleep пробуждает не раньше истечения заявленного времени, но точный интервал не гарантируется.

Судя по косвенным намёкам в документации, время ожидания Sleep кратно кванту времени в планировщике. Одно время я тоже боролся за миллисекундную точность.  Насколько сейчас помню, waitable timer демонстрирует гораздо большую точность, чем Sleep.  См. CreateWaitableTimer и WaitForMultipleObjects

Помимо waitable timers в Windows есть ещё два вида таймеров, Multimedia Timers и CreateTimerQueue, но эти таймеры пробуждают не тот поток, в котором таймеры созданы, а некоторый специализированный.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
MVI
Гость
« Ответ #2 : 27-04-2005 10:29 » 

Пробовал CreateWaitableTimer и WaitForMultipleObjects. Ведут себя аналогично Sleep
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 27-04-2005 10:52 » 

Ну что поделать, Windows не есть Real Time Operating System. И никогда ей не была.

Экспериментируй с multimedia таймерами и timer queue
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
MVI
Гость
« Ответ #4 : 29-04-2005 09:16 » 

Спасибо.
С помощью Multimedia Timer добился погрешности в 1мс, что меня вполне устраивает.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines