Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Литература / photon_old.doc
Скачиваний:
40
Добавлен:
02.04.2015
Размер:
7.88 Mб
Скачать
          1. Использование PtTimer

Простейшим способом обеспечить работу таймера является использование виджета PtTimer. Он определяет такие ресурсы:

Pt_ARG_TIMER_INITIAL

– начальный интервал истечения времени

Pt_ARG_TIMER_REPEAT

– необязательный интервал времени повтора

Pt_CB_TIMER_ACTIVATE

– время окончания ответной реакции

Для получения более полной информации см. "Справочник виджетов".

 Когда Вы создаёте виджет PtTimer в PhAB, он возникает как чёрный прямоугольник. Этот прямоугольник не появится, когда Вы запустите приложение – это просто заполнитель места [Малевичи… Прим.пер.].

PtTimer прост в использовании, но не даёт точности событий таймера. В частности, он не гарантирует постоянной частоты повторения; поскольку повторение осуществляется путём взведения таймера вновь для каждого события, какие-либо задержки в обработке событий аккумулируются. Таймеры ядра гарантируют точность частоты повторения, даже если Ваше приложение не может её выдерживать.

          1. Функции RtTimer*

Функции RtTimer* (описанные в "Справочнике библиотеки Photon") дают более точный отсчёт времени, нежели PtTimer, но ещё не соответствуют требованиям жёсткого реального времени. Они охватывают функции POSIX, манипулирующие таймерами ядра:

RtTimerCreate()

Создать таймера реального времени

RtTimerDelete()

Удалить таймера реального времени

RtTimerGetTime()

Получить у таймера реального времени оставшееся время

RtTimerSetTime()

Установить время срабатывания для таймера реального времени

Эти функции более точные, чем PtTimer, поскольку таймер взводится по-новому не Photon'ом, а ядром. Однако, если Photon занят обработкой событий, это по-прежнему может привести к задержке в обработке произошедших событий.

    1. Меню инициализации

Вам может понадобиться сделать с меню различные вещи до того, как оно будет отображено. Вы можете использовать установочную функцию меню, чтобы:

  • включить, отключить или переключить пункты меню

  • изменить текст для какого-то пункта

Вы можете также использовать функциональный пункт меню, чтобы сгенерировать новые пункты во время исполнения.

Методы, выполняющие это, обсуждаются в нижеследующих разделах.

          1. Включение, отключение или переключение пунктов меню

Если в текущем состоянии пункт меню не является допустимым выбором, хорошей идеей является отключить его, так чтобы пользователь и не пытался его выбрать. Конечно, Вам также понадобится сделать его доступным, когда настанет время. Если Ваше меню имеет какие-либо переключающиеся пункты, Вам также понадобится установить их перед тем, как меню будет отображено. Чтобы выполнить это, используйте функцию ApModifyItemState(). Функция ApModifyItemState() принимает переменное число аргументов:

  • Первым аргументом является указатель на модуль меню. Например, если именем экземпляра модуля меню является draw-menu, передайте &draw-menu как первый параметр.

  • Вторым параметром является желаемое состояние:

AB_ITEM_DIM

для отключения пункта

AB_ITEM_NORMAL

для включения и возвращения пункта в исходное состояние

AB_ITEM_SET

для установки переключающегося пункта

  • Остальные аргументы формируют завершающийся NULL'ом список пунктов меню, которые будут установлены в задаваемое состояние. Этот список состоит из глобальных переменных ABN_..., относящимся к пунктам меню.

Например, пердположим, что Ваше приложение имеет модуль меню по имени draw_menu, включающее пункты с именами экземпляров draw_group и draw_align. Мы можем отключить эти пункты следующим вызовом:

ApModifyItemState( &draw_menu, AB_ITEM_DIM,

ABN_draw_group, ABN_draw_align, NULL);

Соседние файлы в папке Литература