
- •Оглавление
- •1 Введение
- •2 Цель работы
- •3 Теоретические сведения о таймерахWindows
- •2. Временной интервал, который вы задаете при вызове функции SetTimer всегда округляется вниз до целого числа кратного частоте
- •4 Описание используемыхWinApIфункций
- •5 Текст программы
- •6 Результаты работы
- •7 Выводы
- •8 Литература
2. Временной интервал, который вы задаете при вызове функции SetTimer всегда округляется вниз до целого числа кратного частоте
срабатываний таймера. Например, интервал в 1000 миллисекунд, разделенный на 54.925 миллисекунды равен 18.207 срабатываниям таймера, которые округляются вниз до 18 срабатываний, что фактически составляет интервал в 989, а не 1000 миллисекунд. Для интервалов, меньших 55 миллисекунд, каждое срабатывание таймера генерирует одно сообщение WM_TIMER.
Как уже упоминалось, программы под DOS, написанные для IBM PC и совместимых компьютеров, могут использовать аппаратные срабатывания таймера, перехватывая аппаратное прерывание. Когда происходит аппаратное прерывание, выполнение текущей программы приостанавливается и управление передается обработчику прерываний. Когда прерывание обработано, управление возвращается прерванной программе.
Также как аппаратные прерывания клавиатуры и мыши, аппаратное прерывание таймера иногда называется асинхронным прерыванием, поскольку оно происходит случайно по отношению к прерываемой программе.
Хотя Windows тоже обрабатывает асинхронные таймерные прерывания, сообщения WM_TIMER, которые Windows посылает приложению, не являются асинхронными. Сообщения Windows ставятся в обычную очередь сообщений и обрабатываются как все остальные сообщения. Поэтому, если вы задаете функции SetTimer 1000 миллисекунд, то вашей программе не гарантируется получение сообщения WM_TIMER каждую секунду или даже (как уже упоминалось выше) каждые 989 миллисекунд. Если ваше приложение занято больше, чем секунду, то оно вообще не получит ни одного сообщения WM_TIMER в течение этого времени.
4 Описание используемыхWinApIфункций
При написании программы использовались следующие функции WinAPI:
SendDlgItemMessage
wsprintf
GetLocalTime
ExitProcess
GetModuleHandle
DialogBoxParam
EndDialog
SetTimer
KillTimer
LoadIcon
GetWindowLong
GetDlgItemInt
SendMessage
GetDlgItem
CreateProcess
GetSystemMenu
AppendMenu
MessageBox
Все функции, их назначение и передаваемые параметры сведены в таблице 1.
Таблица 1.1 – Сводная таблица используемых функций WinAPI
Функция |
Действие |
Параметры |
1 |
2 |
3 |
SendDlgItemMessage ( HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam );
|
Отправляет сообщение заданному элементу управления в диалоговом окне |
hDlg Идентифицирует диалоговое окно, которое содержит орган управления nIDDlgItem Определяет идентификатор органа управления, который принимает сообщение Msg Определяет сообщение, которое будет отправлено. wParam Определяет дополнительную конкретизирующую сообщение информацию lParam Определяет дополнительную конкретизирующую сообщение информацию |
Таблица 1.2 – Сводная таблица используемых функций WinAPI продолжение
1 |
2 |
3 |
wsprintf ( LPTSTR lpOut, LPTSTR lpFmt, … ); |
Форматирует и хранит ряд символов и значений в буфере. Любые параметры преобразуются и копируются в буфер выводимых данных согласно соответствующей спецификации формата в форматируемой строке. |
lpOut Указатель на буфер, который получит форматированный вывод данных. lpFmt Указатель на строку с завершающим нулем, которая содержит в себе спецификации управления форматом ... Указывает один или несколько дополнительных параметров
|
GetLocalTime ( LPSYSTEMTIME lpSystemTime );
|
Извлекает текущую локальную дату и время. |
lpSystemTime Указатель на структуру SYSTEMTIME, чтобы получить текущую локальную дату и время |
ExitProcess ( UINT uExitCode );
|
Заканчивает работу процесса и всех его потоков. |
uExitCode Определяет код выхода для процесса, и для всех потоков, которые завершают работу в результате вызова этой функции |
GetModuleHandle ( LPCTSTR lpModuleName );
|
Извлекает дескриптор указанного модуля, если файл был отображен в адресном пространстве вызывающего процесса. |
lpModuleName Указатель на символьную строку с нулем в конце, которая содержит имя модуля.Если параметр NULL, то возвращает дескриптор .exe |
DialogBoxParam ( HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, // дескриптор окна владельца DLGPROC lpDialogFunc, LPARAM dwInitParam );
|
Создает модальный блок диалога из ресурса шаблона диалогового окна |
hInstance Идентифицирует экземпляр модуля, исполняемый файл, которого содержит шаблон диалогового окна. lpTemplateName Идентифицирует шаблон диалогового окна. hWndParent Идентифицирует диалоговое окно, которое владеет блоком диалога. lpDialogFunc Указывает на процедуру диалогового окна dwInitParam Устанавливает значение, которое пересылает диалоговому окну сообщение WM_INITDIALOG в параметре lParam. |
Таблица 1.3 – Сводная таблица используемых функций WinAPI продолжение
1 |
2 |
3 |
EndDialog ( HWND hDlg, int nResult );
|
Разрушает модальное диалоговое окно, вынуждая систему закончить любую обработку для блока диалога. |
hDlg Идентифицирует диалоговое окно, которое будет разрушено. nResult Устанавливает значение, которое будет возвращено прикладной программе от функции, которая создавала диалоговое окно. |
SetTimer ( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );
|
Создает таймер с указанным значением времени простоя. |
nDEvent Определяет идентификатор таймера отличный от нуля. nElapse Определяет значение времени задержки в миллисекундах. lpfnTimer Определяет адрес обеспеченный прикладной программой для TimerProc функции повторного вызова, которая обрабатывает WM_TIMER сообщения. Если этот параметр NULL WM_TIMER сообщения помещены в очередь сообщений прикладной программы |
KillTimer ( Wnd: HWnd, IDEvent:Integer );
|
Ликвидирует указанный таймер |
Wnd Идентификатоp окна. IDEvent Идентификатоp события таймеpа. |
LoadIcon ( HINSTANCE hInstance, LPCTSTR lpIconName // идентификатор );
|
Загружает определяемый ресурс пиктограммы из исполняемого файла |
hInstance Идентифицирует экземпляр модуля, исполняемый файл которого содержит пиктограмму, которая будет загружена. Этот параметр должен иметь значение ПУСТО (NULL), когда загружается стандартная пиктограмма. lpIconName идентификатор ресурса в младшем слове и нули в старшем слове |
GetWindowLong ( HWND hWnd, int nIndex );
|
Извлекает информацию об определяемом окне |
hWnd Определяет окно, о котором получается информация. nIndex Определяет смещение (начиная от нуля) получаемого значения. GWL_ID - получить идентификатор окна. |
GetDlgItemInt ( HWND hDlg, int nIDDlgItem, BOOL *lpTranslated, // индикатор успешного завершения/неудачи BOOL bSigned ); |
Переводит текст заданного органа управления в блоке диалога в целочисленное значение. |
hDlg Дескриптор диалогового окна nIDDlgItem Идентификатор элемента блока диалога, который определяет орган управления. |
Таблица 1.4 – Сводная таблица используемых функций WinAPI продолжение
1 |
2 |
3 |
|
|
lpTranslated Этот параметр необязательный: он может быть значением ПУСТО (NULL). В этом случае, функция не возвращает информации об успехе или неудаче. bSigned Определяет, должна ли функция сначала проверять текст на знак "минус" и возвращать значение целого числа со знаком, если она находит его. Значение ИСТИНА (TRUE) устанавливает, что это должно быть сделано, ЛОЖЬ (FALSE), что этого делать не надо. |
GetDlgItem ( HWND hDlg, int nIDDlgItem );
|
Извлекает дескриптор органа управления в заданном диалоговом окне. |
hDlg Идентифицирует диалоговое окно, которое содержит орган управления. nIDDlgItem Определяет идентификатор элемента управления, который будет возвращен обратно. |
BOOL CreateProcess ( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation );
|
Основная функция запуска процесса |
lpApplicationName. - Имя выполняемого модуля lpCommandLine-Командная строка. lpProcessAttributes - Атрибуты защиты для нового приложения. lpThreadAttributes - Атрибуты защиты для первого потока. bInheritHandles - Флаг наследования dwCreationFlags -Флаг способа создание процесса lpEnvironment.-Указывает на блок среды. lpCurrentDirectory - Указывает текущий диск и каталог. lpStartupInfo - Используется для настройки свойств процесса, lpProcessInformation Структура PROCESS_INFORMATION с информацией о процессе
|
Таблица 1.5 – Сводная таблица используемых функций WinAPI продолжение
1 |
2 |
3 |
GetSystemMenu ( Wnd: HWnd; Revert: Bool ): |
Считывает системное меню окна для копиpования и модификации. |
hWnd Идентифицирует окно, которое будет владеть копией меню окна. bRevert Определяет действие, которое нужно предпринять. Если этот параметр – ЛОЖЬ (FALSE), GetSystemMenu возвращает дескриптор копии используемого в настоящее время меню окна. Если этот параметр - ИСТИНА (TRUE), GetSystemMenu возвращает меню окна обратно в состояние определяемое в Windows по умолчанию. |
AppendMenu ( HMENU hMenu, // дескриптор меню, который будет изменен UINT uFlags, // флажки пункта меню UINT uIDNewItem, LPCTSTR lpNewItem // пункт контекстного меню );
|
Добавляет в конец определяемой строки меню, "выскакивающего" меню, подменю или контекстного меню новый пункт |
hMenu Идентифицирует строку меню, "выскакивающее" меню, подменю или контекстное меню, которое будет изменено. uFlags Определяет флажки, которые управляют внешним видом и характеристиками нового пункта меню. Этот параметр может быть комбинация значений, перечисленных в разделе Замечаний ниже. uIDNewItem Определяет или идентификатор нового пункта меню или, если параметр uFlags установлен в MF_POPUP, дескриптор "выскакивающего" меню или подменю. lpNewItem Определяет содержание нового пункта меню. |
MessageBox ( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );
|
Создает, отображает на экране и оперирует окном сообщений |
hWnd Идентифицирует окно владельца блока сообщений, которым оно было создано. lpText Указывает на строку с символом нуля в конце, содержащую сообщение, которое должно быть отражено на экране. lpCaption Указывает на строку с символом нуля в конце, используемую для заголовка диалогового окна. uType Определяет установку битов флажков, которые обуславливают содержание и поведение диалогового окна. |