Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
76
Добавлен:
02.04.2015
Размер:
8.79 Mб
Скачать
          1. Удаление функции обработки сигналов

Чтобы удалить функцию обработки сигнала:

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

  • Верните Pt_END функцией обработки сигнала. Если функция была зарегистрирована для более чем одного сигнала, она останется установленной для остальных сигналов, кроме того, который как раз обрабатывался.

    1. Другие механизмы ввода/вывода

Если Вашему приложению необходимо выполнить ввод/вывод, такие как чтение или запись в трубопровод, Вы должны добавить обработчик файлового дескриптора (fd handler). Обработчик файлового дескриптора – это функция, вызываемая в главной петле событий, когда заданный файловый дескриптор (fd) готов к вводу или выводу:

  • Чтобы добавить обработчик файлового дескриптора в Ваше приложение, вызовите функцию PtAppAddFd() или PtAppAddFdPri().

  • Подробности о прототипе обработчика файлового дескриптора см. в описании PtFdProc_t в "Справочнике библиотечных функций Photon'а"

  • Чтобы изменить режим, являющийся сферой интересов обработчика файлового дескриптора, вызовите функцию PtAppSetFdMode().

  • Чтобы удалить обработчик файлового дескриптора, верните из него Pt_END или вызовите функцию PtAppRemoveFd().

Эти функции описаны в "Справочнике библиотечных функций Photon'а".

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

  1. Глава 17. Параллельные операции

В этой главе обсуждатся:

  • Обзор

  • Потоки

  • Рабочие процедуры

  • Фоновое исполнение

    1. Обзор

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

Возврат управления из Вашей ответной реакции позволяет виджетам продолжить визуальное самообновление. Это также даёт некую визуальную обратную связь с пользователем, когда тот попытается что-то сделать. Если Вы не хотите, чтобы пользователь мог выполнить в это время какую-либо операцию пользовательского интерфейса, Вы должны деактивировать меню и кнопки команд. Вы можете сделать это установкой флага Pt_BLOCKED в ресурсе Pt_ARG_FLAGS виджетов окна приложения.

При распараллеливании операций Вы можете рассмотреть применение одного из нескольких различных механизмов:

  • Если Вы не можете разбить операцию на отдельные части, обрабатывайте событитие Photon'а во время выполнения операции; См. раздел "Фоновое исполнение" ниже.

  • Если Вы можете разбить операцию на маленькие куски программы, Вы можете захотеть иметь функцию, которая отслеживает текущее состояние и исполняет один маленький кусок операции за раз. Вы можете затем установить виджет таймера и подсоединить его к ответной реакции, которая бы вызывала функцию каждый раз, когда таймер бы срабатывал. Или же Вы можете вызывать функцию из так называемой рабочей процедуры. Эти методы особенно эффективны для многократно повторяющихся опреаций, когда функция может быть исполнена один раз в итерации. См. раздел "Рабочие процедуры" ниже.

  • Используйте множественные кнопки. Это требует определённой специфической обработки, поскольку библиотеки Photom'а не являются потокобезопасными (thread-safe); см. раздел "Потоки" ниже.

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

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