![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Пользователь
Регистрация: 26.04.2010
Сообщений: 35
|
![]()
Mожет несовсем в тему :есть функция мультимедийного таймера timeSetEvent, которая позволяет создать таймер с интервалом от 1 мс. Короткое описание с инета:
Сначала готовится процедура обратного вызова (call back) с таким заголовком: procedure TimeProc(uID, uMsg: UINT; dwUser, dwi, dw2: DWORD); stdcall; Здесь uID - идентификатор события таймера (см. ниже); uMsg - не используется; dwuser - произвольное число, передаваемое процедуре в момент запуска таймера; dwi, dw2 - не используются. Запуск таймера реализуется функцией function timeSetEnet(uDelay, uResolution: UINT; IpTimeProc:Pointer; dwUser: DWORD; fuEvent: UINT): UINT; stdcall; external 'winmm.dll'; Здесь uDelay - требуемый период срабатывания таймера (в мс); uResolution - разрешение таймера; значение 0 означает, что события срабатывания таймера будут возникать с максимально возможной частотой; в целях снижения нагрузки на систему вы можете увеличить это значение; IpTimeProc - адрес процедуры обратного вызова; dwUser - произвольное число, которое передается процедуре обратного вызова и которым программист может распоряжаться по своему усмотрению; fuEvent - параметр, управляющий периодичностью возникновения события таймера: time_oneshot (0) - событие возникает только один раз через uDelay мс; time_periodic (1) - события возникают периодически каждые uDelay мс. При успешном обращении функция возвращает идентификатор события таймера или 0, если обращение было ошибочным. Таймер останавливается, и связанные с ним системные ресурсы освобождаются функцией function timeKillEvent(uID: UINT): UINT; stdcall; external 'winmm.dll'; Здесь uID - идентификатор события таймера, полученный с помощью timeSetEvent. В TimeProc можно было бы расчитывать твои Updatedann через 5 млс |
![]() |
![]() |
![]() |
#12 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
![]()
А почему бы не использовать WaitForSingleEvent?
|
![]() |
![]() |
![]() |
#13 |
Регистрация: 01.09.2010
Сообщений: 5
|
![]()
Парни, sleep() производит задержку 5 милисекунд, и 1 милисекунду, вот только я, не правильно замерял.
В посте выше, я описал, как правильно замерять скорость выполнения функции. TwiX, про WaitForSingleEvent не слышал, можете подробнее описать... Последний раз редактировалось Dasverd2010; 07.09.2010 в 13:11. |
![]() |
![]() |
![]() |
#14 |
Участник клуба
Регистрация: 28.07.2009
Сообщений: 1,510
|
![]()
Полезная штука для потоков. СОздаётся переменная типа TEvent(или что-то подобное). В конце синхронизации активируем этот ивент, вроде так: SetEvent. А Вашей функции заменяем слип на WaitForSingleEvent(MyEvent) - эта строка будет ждать включения MyEvent в синхронизированной процедуре.
Что бы узнать поподробней, то просто вбейте в справку WaitForSingleEvent, или в гугл |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как округлить милисекунды в кол-во сек и мили сек? | XerSon | Общие вопросы Delphi | 2 | 09.06.2010 10:26 |
Как приостаносить поток до события в другом потоке | Sionus | Помощь студентам | 2 | 30.03.2010 21:51 |
как сделать паузу (или задержку) в цыкле : с# | Natok | Помощь студентам | 7 | 30.05.2009 12:55 |
Число N, заменить одну из его цифр, чтобы получилось число, max близкое к некоторой степени двойки | urgu_st | Помощь студентам | 13 | 23.10.2007 09:14 |
Как организовать задержку выполнения?? | Kenifer | Общие вопросы Delphi | 12 | 03.09.2007 21:56 |