Описание Gtk-Perl | ||
---|---|---|
Предыдущий | Следующий |
Вам может показаться интересным, как вы можете заставить GTK выполнять
полезную работу при вызове
main Gtk.
Для этого у Вас есть несколько возможностей. Используя приведенную функцию,
вы можете создавать функцию задержки, которая будет периодически вызываться.
$timer = Gtk->timeout_add( $interval, \&function,
@function_data );
Первый аргумент - интервал (в миллисекундах) между вызовами вашей функции.
Второй аргумент - функция, которую вы хотите авызвать
и третий - данные для вызываемой функции.
Возвращаемое значение - число, которое может быть использовано для остановки
задержки при помощи
Gtk->timeout_remove( $timer );
Вы также можете остановить функцию задержки возвращая ложное значение из вызываемой вами функции, в противном случае - истинное.
Объявление вашего вызова должно быть похожим на нечто такое:
sub timeout_callback
{
my ( @data ) = @_;
...
}
Изящная особенность GDK (библиотеки, лежащей в основе GTK) - способность
контролировать
данные в файловых дескрипторах (возвращаемых функциями open()
или
socket()).
Эта возможность моет быть полезной для сетевых приложений. Функция
$id = Gtk::Gdk->input_add( $source, $condition,
\&function, @data );
берет файловый декриптор первым аргументом, а вторым аргументом можно задать
то, что необходимо контролировать с помощью GDK
Возможные варианты:
'read' - вызывает нужную функцию, когда в файловом дексрипторе есть данные и их надо прочитать
'write' - вызывает нужную функцию, когда файловый дескриптор готов к записи.
Я уверен, что Вы уже поняли, что третий аргумент - фукнция, которую необходимо вызвать, а четвертый - данные для этой функции.
Возвращаемое значение - некое значение, которое может быть использовано
для остановки контроля файлового дескриптора
например при помощи такой функции:
Gtk::Gdk->input_remove( $id );
Вызов функции может быть определен например так:
sub input_callback
для которой источник и условие срабатывания были определены ранее
{
my ( $source, $condition, @data ) = @_;
...
}
Что если Вы имеете некоторую функцию, которую бы вам хотелось вызываеть в
случае, когда ничего не происходит?
$idle = Gtk->idle_add( \&function, @data );
Этот вызов GTK происходит, в случае например, холостой работы (м.б. что-то
в данных не прошло по всем условиям),
Чтобы убрать этот вызов - необходимо написать так:
Gtk->idle_remove( $idle );
Объяснять значения аргументов я не буду, т.к. они очень сильно похожи на описанные выше. Соответственно по срабатыванию данного условия вызывается функция function. Ложное значение будет прерывать выполнение idle_add()
Предыдущая | В начало | Следующая |
Базовые возможности | Вверх | Графика |