The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Каталог документации / Раздел "Perl" / Оглавление документа

Часть 56. Таймеры, ввод/вывод и функции ожидания(idle)

Содержание
56.1. Таймеры
56.2. Контролирование ввода/вывода
56.3. Функции ожидания(idle)

56.1. Timouts

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

$timer = Gtk->timeout_add( $interval, \&function, @function_data );

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

Gtk->timeout_remove( $timer );

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

Объявление вашего вызова должно быть похожим на нечто такое:

sub timeout_callback
  {
    my ( @data ) = @_;
    ...
}

56.2. Контроль ввода/вывода

Изящная особенность GDK (библиотеки, лежащей в основе GTK) - способность контролировать данные в файловых дескрипторах (возвращаемых функциями open() или socket()). Эта возможность моет быть полезной для сетевых приложений. Функция

$id = Gtk::Gdk->input_add( $source, $condition, \&function, @data );

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

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

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

Gtk::Gdk->input_remove( $id );

Вызов функции может быть определен например так:

sub input_callback
  {
    my ( $source, $condition, @data ) = @_;
    ...
  }

для которой источник и условие срабатывания были определены ранее

56.3. Idle Functions

Что если Вы имеете некоторую функцию, которую бы вам хотелось вызываеть в случае, когда ничего не происходит?

$idle = Gtk->idle_add( \&function, @data );

Этот вызов GTK происходит, в случае например, холостой работы (м.б. что-то в данных не прошло по всем условиям), Чтобы убрать этот вызов - необходимо написать так:

Gtk->idle_remove( $idle );

Объяснять значения аргументов я не буду, т.к. они очень сильно похожи на описанные выше. Соответственно по срабатыванию данного условия вызывается функция function. Ложное значение будет прерывать выполнение idle_add()


ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Оформить подписку на год


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList