| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Таймер |
| Автор: Гость_PriZraK 10.11.2005, 19:29 |
| Мне необходиом, чтобы определенная функция вызывалась каждую секунду. Пожалуйста подскажите как это сделать??? |
| Автор: _hunter 10.11.2005, 19:45 |
| ты угадал. с помощью таймера ( SetTimer() ) |
| Автор: powerfox 10.11.2005, 20:46 |
| В Страуструпе не нашёл, из какой библиотеки ф-я? |
| Автор: cardinal 10.11.2005, 21:20 | ||
|
| Автор: Neitron 11.11.2005, 10:31 |
| Не факт что у него Visual C++ и уродский MFC. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/timers/timerreference/timerfunctions/settimer.asp |
| Автор: Любитель 11.11.2005, 11:17 | ||
Пишем функцию, которая будет периодически вызываться, вызываем
Подробно - MSDN. Функция из WinAPI (#include <windows.h>) |
| Автор: powerfox 11.11.2005, 14:02 |
| А из STL усть что-нибудь, а то у меня Linux(g++-3.4.1). Мне потом надо будет и под Windows скомпайлить, но не очень скоро. Может как-то иначе реализовать счётчик времени выполнения приложения(игра Snake, требуется секундомер)? |
| Автор: Neitron 11.11.2005, 14:11 |
| powerfox Цикл? |
| Автор: Гость_malysh 12.11.2005, 21:15 |
| Пишу арканоид на Dev-Сpp. Не знаю как отслеживать время(ну чтобы шарик нормально летал). |
| Автор: Guest 12.11.2005, 22:04 |
| Создовайт цикл, и в цикле смотри текущее время, посмотри в линухе аналог Sleep, или полюбому в никсах должна быть ф-ция таймера. |
| Автор: powerfox 12.11.2005, 22:41 |
| в Linux - setitimer() http://www.die.net/doc/linux/man/man2/setitimer.2.html |
| Автор: powerfox 17.11.2005, 21:03 |
| Не смог разобраться как работает setitmer - где задавать имя вызываемой ф-ии? Может кто покажет пример(hello world c таймером)? |
| Автор: Mayk 17.11.2005, 21:08 | ||
| powerfox а может тебе воспользоваться сигналами?
Только афаир alarm со sleep'ом плохо сочетаются Добавлено @ 21:09 А хотя в принципе один фиг. setitimer тоже sigalrm посылает |
| Автор: Mayk 17.11.2005, 21:21 | ||
Вот пример - первый выстрел таймера происходит по alarm'у, другие по setitimer.
|
| Автор: powerfox 17.11.2005, 21:41 |
| Не дадите несколько пояснений, что происходит(строки 21-24, 13, 14) |
| Автор: Mayk 17.11.2005, 22:00 | ||||||
Ну примерно так это выглядит:
Установка обработчиков сигнала. SIGALRM генерируется alarm, по прошествии указанного кол-ва секунд. SIGVTALRM - setitimer'ом. При генерации сигнала могут произойти следующие вещи - сигнал может быть проигнорирован, и мы о нём не узнаем. Приложение будет работать так как будто сигнала не было. Приложение может быть нагло убито(и мы об этом не узнаем - что нас убивают). Или может быть вызван пользовательский обработчик сигналов. Управление передастся обработчику сигнала, приложение продолжит работу. Кстати,
Что собственно мы и хотим. В качестве аргумента обработчик получает номер сигнала Подробнее смотреть в signal(2), signal(7), alarm(2), sigaction(2).
13 - установка таймера. Каждые пол секунды (кажется) приложение будет получать SIGVTALRM. ITIMER_VIRTUAL выбран для того, чтоб приложение получало нечто отличное от SIGALRM. 14 - perror просто для отладочных целей - всё ли передано правильно. Подробнее смотреть setitimer(2), perror(3) |
| Автор: powerfox 17.11.2005, 22:07 |
| Спасибо, буду разбираться. |
| Автор: S.A.P. 18.11.2005, 08:12 |
| powerfox Если ты используешь SDL, то там вроде свой таймер есть, переносимый. |
| Автор: powerfox 18.11.2005, 16:30 | ||
| To Perchilla: Огромное спасибо! Наверное, даже в том туториале описан этот таймер - поищу, когда снова будет время. Добавлено @ 16:36
Реально работает. Похоже на события, обсуждаемые в соседней ветке. Нашёл сигнал выдаваемый по нажатию клавиши. Можно совместить с getchar(), чтобы получать код клавиши в GUI приложении. SDL обработчик мне не очень нравится - но других я не знаю?(не буквы) |
| Автор: leniviy 10.2.2011, 11:25 |
Обязательно вызывать alarm(1) ? У меня и без него работает, если я выставляю it_value = 1мкс и it_interval = 1с |
| Автор: cardinal 11.2.2011, 00:02 |
| leniviy, ты видел сколько лет теме? |