Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Пауза через API?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
_Ronin_



Зарегистрирован: 02.04.2006
Сообщения: 2

СообщениеДобавлено: Вс Апр 02 2006 07:44    Заголовок сообщения: Пауза через API? Ответить с цитатой

Народ, кто-нибудь знает как сделать паузу на определенное количество миллисекунд через API - функцию? Подскажите, плз.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Вс Апр 02 2006 08:22    Заголовок сообщения: Ответить с цитатой

ОС?
ЯП?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
_Ronin_



Зарегистрирован: 02.04.2006
Сообщения: 2

СообщениеДобавлено: Вс Апр 02 2006 21:23    Заголовок сообщения: Ответить с цитатой

Windows. Язык программирования без разницы какой.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Пн Апр 03 2006 18:53    Заголовок сообщения: Ответить с цитатой

А че именно API? Ладно, посмотрю че-нибудь...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Вт Апр 04 2006 13:16    Заголовок сообщения: Ответить с цитатой

В API есть функция Sleep, точного синтаксиса не скажу, но она должна быть, а вообще в Си тоже есть функция sleep. Да, будьте готовы что работает она по сигналам таймера, то есть нельзя сделать паузу на 1 миллисекунду, паузы будут кратными периоду таймера около 1/18 секунды.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Malcolm



Зарегистрирован: 12.06.2004
Сообщения: 187
Откуда: Хабаровск

СообщениеДобавлено: Ср Апр 05 2006 20:56    Заголовок сообщения: Ответить с цитатой

Импорт в делфи
Цитата:
procedure Sleep; external kernel32 name 'Sleep'; stdcall;


Цитата:
Да, будьте готовы что работает она по сигналам таймера, то есть нельзя сделать паузу на 1 миллисекунду, паузы будут кратными периоду таймера около 1/18 секунды.

Неправда.

проверьте сами
Цитата:

time := timegettime;
sleep(238);
time := timegettime - time;
label1.Caption := inttostr(time);

в итоге в 99% случаев получаем 238 или 239 при незагружености системы. в других случаях нечто большее. Делаем вывод что функция sleep вызывает остановку нити не менее чем на указанное число миллисекунд. Обо всем остальном, в т.ч. и о том когда же нить действительно возобновится, заботится вытесняющая многозадачность.
_________________
АсЬки ТуТ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Чт Апр 06 2006 07:28    Заголовок сообщения: Ответить с цитатой

А вы думаете указанные значения не кратны 1/18?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Malcolm



Зарегистрирован: 12.06.2004
Сообщения: 187
Откуда: Хабаровск

СообщениеДобавлено: Пт Апр 07 2006 18:02    Заголовок сообщения: Ответить с цитатой

Не думаю а знаю, опять же посчитайте сами.

0,239 / ( 1/18 ) = 18 * 0,239 = 4,302

совсем некратно. Но это только во первых.

Во вторых, еслиб все было так как вы говорите, то столь стабильные результаты времени мы бы не получали т.к. конкретный код может выполняется не одновременно с тиком, а может быть посередине между тиками или ближе к следующему тику. В итоге задержка была бы ( 1/18 )*k + x, где k - целое, а x<1/18, и x это время с момента вызова sleep() до следующего тика, на практике же ничего подобного не наблюдается.

и в третьих. Допустим вы правы, тогда почему же в Windows SDK и в MSDNоб этом абсолютно ничего не сказано, напротив утверждается что Sleep() вызывает задержку нити как минимум на указанное число миллисекунд?

Взвесив все за и ни одного против делаем вывод что никакие тики таймера на работу этой функции не влияют. Возможно подобное поведение имело место в более ранних версиях виндовс, но это утверждать не берусь.
_________________
АсЬки ТуТ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Kefir



Зарегистрирован: 16.04.2005
Сообщения: 443
Откуда: Пермь

СообщениеДобавлено: Сб Апр 08 2006 21:10    Заголовок сообщения: Ответить с цитатой

Ну обещание что пауза будет не меньше справедливо. А насчет таймера, так ведь по нему происходит переключение процессов. Правда его можно перепрограммировать, но, насколько мне известно, в микрософте этим не занимались...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Malcolm



Зарегистрирован: 12.06.2004
Сообщения: 187
Откуда: Хабаровск

СообщениеДобавлено: Вс Апр 09 2006 15:05    Заголовок сообщения: Ответить с цитатой

Мы когда-нибудь начнем верить фактам? То что переключение процессов происходит по таймеру совершенно никак не мешает функции sleep сделать задержку в точное число миллисекунд. Более того windows xp может переключать процессы быстрее чем 18 раз в секунду, например раз в 10мс, и даже может быть такое что работа одного процесса прерывается всего на 1мс, для, например, обработки сообщения другим процессом. не верите - проверьте.
_________________
АсЬки ТуТ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
NewFork



Зарегистрирован: 28.02.2005
Сообщения: 73

СообщениеДобавлено: Вт Май 16 2006 08:02    Заголовок сообщения: Re: Пауза через API? Ответить с цитатой

_Ronin_ писал(а):
Народ, кто-нибудь знает как сделать паузу на определенное количество миллисекунд через API - функцию? Подскажите, плз.

Есть фишка когда через АПИ можно вызывать в 100% нужное время функцию, посмотрю ее реализацию на днях и напишу.
Ну а дальше, не знаю, можно ее например зарядить на запуск каждую милисекунду пока не пройдет нужное время, и потом остановить... Была где-то реализация такой фигни... помоему в примерах АПИ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Malcolm



Зарегистрирован: 12.06.2004
Сообщения: 187
Откуда: Хабаровск

СообщениеДобавлено: Пт Май 19 2006 19:44    Заголовок сообщения: Ответить с цитатой

Цитата:
Есть фишка когда через АПИ можно вызывать в 100% нужное время функцию,

имхо невозможно
_________________
АсЬки ТуТ
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...