Ассемблер для Windows


         

Таймеры в консольном приложении



IV

В последнем разделе главы мы рассмотрим довольно редко освещаемый в литературе вопрос - таймеры в консольном приложении. Надо сказать, что мы несколько опережаем события и рассматриваем таймер в консольном приложении раньше, чем в приложении GUI (Graphic Universal Interface - так называются обычные оконные приложения).

Основным способом создания таймера является использование функции SetTimer. Позднее мы будем подробно о ней говорить. Таймер может быть установлен в двух режимах. Первый режим - это когда последний параметр равен нулю. В этом случае на текущее окно (его функцию) через равные промежутки времени, определяемые третьим параметром, будет приходить сообщение WM_TIMER. Во втором режиме последний параметр указывает на функцию, которая будет вызываться опять через равные промежутки времени. Однако для консольного приложения эта функция не подходит, так как сообщение WM_TIMER пересылается окну функцией DispatchMessage, которая используется в петле обработки сообщений. Но использование этой функции для консольных приложений проблематично.

Для консольных приложений следует использовать функцию timeSetEvent. Вот параметры этой функции:

  • 1-й параметр - время задержки таймера, для нас это время совпадает со временем между двумя вызовами таймера.
  • 2-й параметр - точность работы таймера (приоритет посылки сообщения).
  • 3-й параметр - адрес вызываемой процедуры.
  • 4-й параметр - параметр, посылаемый в процедуру.
  • 5-й параметр - тип вызова - одиночный или периодический.
  • Если функция завершилась удачно, то в EAX возвращается идентификатор таймера.

    Сама вызываемая процедура получает также 5 параметров:

    • 1-й параметр - идентификатор таймера.
    • 2-й параметр - не используется.
    • 3-й параметр - параметр Dat (см. timeSetEvent).
    • 4 и 5-й параметры - не используются.
    • Для удаления таймера используется функция timeKillEvent, параметром которой является идентификатор таймера.

      .386P ; плоская модель .MODEL FLAT, stdcall ; константы STD_OUTPUT_HANDLE equ -11 STD_INPUT_HANDLE equ -10 TIME_PERIODIC equ 1 ; тип вызова таймера




      Содержание  Назад  Вперед