Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Лекция 14
Таймер_ 1
Создание таймера 1
Остановка таймера 1
Пример использования таймера 2
Тестирование работы таймера 3
Для создания системного таймера оконный класс может использовать функцию-член SetTimer ( ) класса CWnd со следующим прототипом:
UINT SetTimer ( UINT nIDEvent , UINT nElapse ,
void ( CALLBACK EXPORT* lpfnTimer ) (HWND , UINT , UINT , DWORD )) ;
Эта функция возвращает идентификатор таймера, если она выполнена успешно, и ноль противном случае. Параметры:
nIDEvent идентификатор таймера;
nElapse задает время срабатывания таймера в миллисекундах;
lpfnTimer указатель на callback-функцию, которая обрабатывает сообщения WM_TIMER. Если этот параметр равен NULL, сообщения WM_TIMER помещаются в очередь сообщений приложения и обрабатываются оконным объектом.
По истечении времени в nElapse миллисекунд после установки таймера или предыдущего его срабатывания система посылает сообщение WM_TIMER в очередь приложения или передает его для обработки функции, на которую указывает параметр IpfnTimer. Прототип функции, на которую ссылается этот указатель, должен быть следующим:
void CALLBACK EXPORT
TimerProc ( HWND hWnd , UINT nMsg , UINT nIDEvent , DWORD dwTime ) ;
Здесь
hWnd дескриптор оконного объекта, который вызвал функцию SetTimer ( ),
nMsg идентификатор сообщения WM_TIMER,
nIDEvent идентификатор таймера;
dwTime системное время.
Имя этой функции не обязательно должно быть TimerProc, однако она должна возвращать 0.
Остановить установленный таймер можно с помощью функции-члена того же класса KillTimer ( ) со следующим прототипом:
BOOL KillTimer ( int nIDEvent ) ;
В качестве параметра nIDEvent этой функции передается идентификатор таймера. Функция возвращает TRUE, если таймер остановлен, и FALSE – если нет.
При размещении указанных функций в программе следует иметь в виду, что эти функции в конечном итоге вызывают функции Windows, каким передается в качестве параметра дескриптор окна, с которым связывается таймер. Это означает, что установка таймера не может быть произведена раньше, чем будет создано окно. Наиболее ранней в смысле выполнения программы точкой для установки таймера является обработчик события OnNcCreate ( ). Уничтожение таймера также должно производиться, когда окно еще существует. Последней возможностью для вас в этом смысле является обработчик события OnNcDestroy ( ) (но до вызова обработчика базового класса). Мы рекомендуем вам всегда делать это несколько раньше – в обработчике события OnClose ( ) или OnDestroy ( ).
Обработчик событий таймера называется OnTimer ( ) и имеет прототип:
afx_msg void OnTimer (UINT nIDEvent ) ;
Его единственный параметр nIDEvent задает идентификатор таймера. Эта функция вызывается операционной системой, чтобы позволить вашему приложению обработать сообщение Windows WM_TIMER. Параметр, передаваемый функции, отражает значение. которое он имел в момент получения его функцией окна приложения. Если вы вызовете в этом обработчике обработчик базового класса, этот последний будет использовать значение параметра, которое он имел в момент посылки сообщения WM_TIMER, а не значение, переданное вами.
Рассмотрим пример, который не только демонстрирует основные приёмы использования с таймера, но и позволяет тестировать его работу. Диалоговое окно IDD_TIMER_DIALOG содержит три таймера. Первый и второй таймер создаются после щелчка на кнопке “Включить”. Время срабатывания каждого таймера пользователь может установить в соответствующих текстовых полях. Каждый таймер увеличивает значение соответствующего счётчика, которые также отображаются в текстовых полях. Второй таймер срабатывает реже, но увеличивает значение своего счётчика на большее значение. В среднем значения обоих счётчиков должны быть равны. Оба таймера останавливаются при щелчке на кнопке “Выключить”.
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.