Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ещё один вопрос по SetWaitabletimer, второй параметр 
:(
    Опции темы
takedo
Дата 23.12.2005, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Цитата
BOOL SetWaitableTimer(
  HANDLE hTimer,
  const LARGE_INTEGER* pDueTime,
  LONG lPeriod,
  PTIMERAPCROUTINE pfnCompletionRoutine,
  LPVOID lpArgToCompletionRoutine,
  BOOL fResume
);

pDueTime
[in] Time after which the state of the timer is to be set to signaled, in 100 nanosecond intervals. Use the format described by the FILETIME structure. Positive values indicate absolute time. Be sure to use a UTC-based absolute time, as the system uses UTC-based time internally. Negative values indicate relative time. The actual timer accuracy depends on the capability of your hardware. For more information about UTC-based time, see System Time.


Не могу понять, если задать 0. Что это будет означать? Или лучше вместо нуля задавать -1, что будет значить - через 100 наносекунд?


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
_hunter
Дата 23.12.2005, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



так а тебе что нужно? 0 он и в африке 0. 1 -- 100 нс.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
takedo
Дата 23.12.2005, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



мне надо, чтобы таймер срабатывал в ровные часы. при вызове SetWaitableTimer я хочу смотреть, сколько времени осталось до времени "х" и его устанавливать в этом параметре. Но вот если я попаду именно на то самое время, когда дельта будет равна нулю и передам 0, что тогда? Ведь как я понимаю, только отрицательное значение говорит о том, через какое время таймер сработает в первый раз. А при положительном мы задаем конкретное время.
Далее, при взведении таймера снова SetWaitabletimer....(это я так, что бы не было лишних вопросов)


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Romikgy
Дата 23.12.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Цитата(takedo @ 23.12.2005, 07:52)
вместо нуля задавать -1


Цитата(takedo @ 23.12.2005, 07:52)
LONG lPeriod,

smile smile smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
takedo
Дата 23.12.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Romikgy не понял...


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Romikgy
Дата 23.12.2005, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Тип LONG это беззнаковый, как туда можно -1 засунуть?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
takedo
Дата 23.12.2005, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Romikgy понял, но я не вижу возможности вообще его использовать(см. топик про спящий режим), буду при каждом взведении таймера задавать его параметры заново.
Добавлено @ 11:30
Цитата
Тип LONG это беззнаковый, как туда можно -1 засунуть?

Я про const LARGE_INTEGER* pDueTime спрашиваю

Добавлено @ 11:31
и в первом сообщении - выдержка из мсдн


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
_hunter
Дата 23.12.2005, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



Romikgy, он про const LARGE_INTEGER* pDueTime говорил а не про LONG lPeriod

takedo, если ты попадеш именно на то время -- зачем тебе таймер запускать? сразу код выполняй...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
takedo
Дата 23.12.2005, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



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


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Romikgy
Дата 23.12.2005, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Это указатель на структуру FILETIME, в которой ты мож указать время срабатывания твоего таймера, т.е. поставить допустим на 1 декабря 2031 года, и если комп будет включен , то таймер перейдет в сигнальное состояние, и далее будет переводится в сигнальное состояние каждые
Цитата(takedo @ 23.12.2005, 07:52)
LONG lPeriod


Добавлено @ 11:43
Имхо я так понял smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
takedo
Дата 23.12.2005, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



да правильно ты понял, но FILETIME - передавать - большая ошибка(из Рихтера), я спрашиваю про 0. Вот попробую я сейча 0 поставить...
Добавлено @ 11:47
да вроде бы прилетел сразу в обработчик(туда-куда нужно). Но ноль ведь это не отрицательное все-таки число, млин!!!
Надо было сразу проверить, только внимание привлек, сорри.


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
_hunter
Дата 23.12.2005, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



но и не положительное smile


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
takedo
Дата 23.12.2005, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



_hunter
Цитата
но и не положительное 
Если слева посмотришь - отрицательное, справа - положительное... smile



--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Earnest
Дата 23.12.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Чтобы сработал сразу - нужно устанавливать 0, если установить -1 (или любое отрицательное число эквивалентное задержке до ~10 мс), сработает через 10 мс, хотя и устанавливается вроде с дискретностью 100 нс. Короче, реальная дискретность его ~10 мс. Т.е. это вам не performance counter, а обычный системный таймер. smile


--------------------
...
PM   Вверх
takedo
Дата 26.12.2005, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Earnest От куда такая прескорбная информация? smile хотелось бы самому это горестное известие прочитать и перевести в Promt... Не потому, что я не доверяю, просто есть вещи, которые необходимо обязательно сделать самому smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Earnest
Дата 27.12.2005, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Нарвалась, оттуда и информация.
Когда прочла про WaitableTimer с наносекундным временем, обрадовалась. Мне нужно было регулировать скорость некоторого визуального процесса, и я решила что WaitableTimer идеально подходит: заводим таймер, выполняем шаг, до звонка курим, потом опять шаг и курим и т.д. - все в потоке, конечно - и звучит и реализуется элементарно.
Только вот не проверила сразу диапазон доступной скорости в релизе. В дебаге верхний предел скорости был низковат, но я решила - там же море всякой фигни лишней + грешила на другие лишние операции. Когда пришло время таки разобраться со скоростью - выяснилось - не звонит он чаще, чем раз в 10 ms, хоть тресни. Или сразу срабатывает (если dueTime=0). Я его и так и этак (очень не хотелось переписывать), MSDN перерыла - ни слова не нашла. Провела измерения (не спрашивай какие - не помню уже - какой-то тест нарисовала), убедилась: увы. Если хорошенько подумать - это, наверно, очевидно для железячников: 100 Гц системный таймер... Но так хотелось...


--------------------
...
PM   Вверх
takedo
Дата 27.12.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Да, походу дела размечтались smile Таймер на материнке выдает всего то 2МГц(могу ошибаться, но не на пару порядков), а это значит -6 степень, то есть микросекунды. 100наносек = -7 степень - УЖЕ НЕ КАТИТ. Да и WinCe заявляет гарантированное время реакции 45 микросекунд, видимо неспроста smile
Но так хотелось, это уж точно, но 10 ms - это за сто обращений - набежит 1 секунда!! Жуть...
А где интересно этот таймер "крутится"? Надо наверное попытаться ему приоритет поднять обязательно.
Добавлено @ 11:42
там же где и все он крутится?.. ммддааа..
Добавлено @ 11:44
Вот интересно, если запустить два идентичных процесса, в каждом по такому таймеру. Одному процессу поставить приоритет RealTime. Как тогда таймеры будут работать? (хоть бери и пробуй ей богу). Нет мыслей случайно?


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Earnest
Дата 27.12.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Знаешь, я выкрутилась так: просто собрала шаги в пакеты. Из заданной скорости вычисляю нужный период таймера (10, 20 и т.д. мс) и число шагов в пакете. Дальше - как и было: выполняется нужное число шагов, потом курим до звонка. Так что минимальными изменениями обошлась.


--------------------
...
PM   Вверх
takedo
Дата 27.12.2005, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



ну у тебя возможно так, а в принципе то надо бы как-то это решать по другому.. Надо брать товарища Рихтера, смотреть кому же принадлежит таймер(все-таки можно наверное с приоритетом потока, которому принадлежит таймер поиграть!). Ну если накопаю чего или тесты проведу, создам опять таки "интересное замечание" smile Кому только вот интересно? smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
takedo
Дата 27.12.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Цитата
Каждые 20 мс (или около того) Windows просматривает все существующие объекты ядра "поток" и отмечает те из них, которые могут получать процессорное время
Рихтер, глава7.

Earnest c 10 ms тебе просто повезло!


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Earnest
Дата 27.12.2005, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Я думаю, просто сейчас процессоры немного чаще это делать стали. Раньше системный таймер кажется именно 50 Гц был. Книжка-то старая - ей уж лет 10... И не думаю, что он все поправил под современное состояние дел.


--------------------
...
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1088 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.