Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Аналог SetTimer()

1.8K
25 августа 2004 года
SeregaLBN
62 / / 03.10.2003
Есть задача - вызвать ф-цию приблизительно через энцать милисекунд.

Я сейчас это делаю так:
1. Устанавливаю таймер с помощью ::SetTimer(), беря хенд любого окна из моего проекта.
2. В ф-ции обработчике таймера я вызываю нужную мне ф-цию.
Недостаток - привязываюсь к окну, а это меня неустраивает (я пишу независимый модуль, который не имеет никакого отношения к окнам).

Второй вариант, что мне приходит в голову:
1. Создать отдельную очередь.
2. И в этой очереди через некоторое время вызвать нужную мне ф-цию.
Недостаток - я считаю, что это слишком дорогостоящие затраты системных ресурсов.

Был бы рад выслушать прочие идеи по данному вопросу.
Оптимальный, как мне кажется, вариант - вызвать некую WinAPI'шную ф-цию, где в качестве параметров передаются моя callback ф-ция, и время через которое вызовется эта ф-ция. Т.е. почти полный аналог ::SetTimer(), но без привязки к окнам...
368
25 августа 2004 года
rostyslav
629 / / 13.07.2004
есть такой объект, как таймер ожидания (waitable timer).

он не привязан ни к окну, ни даже к приложению. у меня такой таймер создает одно приложение, а обрабатывает другое. точность таймера вроде 100 миллисекунд.

ф-ии CreateWaitableTimer(...)/SetWaitableTimer(...)

и конечно WaitForSingleObject();

хотя не исключено, что подойдет и ф-ия Sleep().
424
25 августа 2004 года
(C)dragon
307 / / 04.12.2002
Надо создавать отдельный поток(CreateThread) и в цикле вызывать функцию Sleep, или тот же WaitForSingleObject на таймер.
1.8K
26 августа 2004 года
SeregaLBN
62 / / 03.10.2003
Мне просоветовали QueueUserWorkItem
Но она появилась в Win2K
8.8K
19 сентября 2004 года
elijah
1 / / 19.09.2004
1. Устанавливаю таймер с помощью ::SetTimer(), беря хенд любого окна из моего проекта.

Хендл =0, т.е. без окна.
Второй или третий параметр(не помню) - указатель
на callback-процедуру обработки события таймера с
параметрами.

Функция SetTimer возвращает хендл таймера, который
после использования таймера убивается функцией KillTimer.

Так как в этом случае процедура не привязана к окну и работает в отдельном потоке, нужно в доступных процедуре данных сохранить хендлы окон перед вызовом SetTimer для работы с ними из этой процедуры.

Удачи!
4.3K
20 сентября 2004 года
VasAlVit
33 / / 03.09.2004
Аналогом функции SetTimer является функция timeSetEvent. Соответственно для удаления нужно использовать функцию timeKillEvent. Основное достоинство - большая точность интервалов времени. Недостаток - требуется подключение DLL-ки WinMM.LIB (она стандартная и входит в поставку начиная с Windows 95 и Windows NT 3.1).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог