Описание 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()). Эта возможность моет быть полезной для сетевых приложений. Функция
берет файловый декриптор первым аргументом, а вторым аргументом можно задать то, что необходимо контролировать с помощью GDK Возможные варианты:$id = Gtk::Gdk->input_add( $source, $condition, \&function, @data );
'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()
Предыдущая | В начало | Следующая |
Базовые возможности | Вверх | Графика |