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

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

Привет всем!
Столкнулся со следующей проблемой. При задании предположим 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