23.3.4. Обработка сигналов
23.3.4. Обработка сигналов
Перед тем, как перейти к следующему пункту, нужно еще раз рассмотреть функцию gtk_signal_connect(). Данной функции нужно передать четыре параметра:
? GtkObject *object — объект, которому может быть послан сигнал;
? const gchar *name — имя сигнала, например, «destroy»;
? GtkSignalFunc func — имя функции обратного вызова, то есть функции, которая будет вызвана для обработки сигнала;
? gpointer data — любые данные, которые будут переданы функции-обработчику.
Что такое сигнал? Как только пользователь переместил мышь, оконная среда посылает приложению сигнал, оповещающий о том, что мышь была перемещена. Как только пользователь щелкнул мышью, приложение получит сигнал об этом щелчке. Обрабатывать все сигналы может окно, но удобнее для каждого виджита установить собственную реакцию на события.
Функция, которая обрабатывает сигнал, называется по-разному: функция-обработчик (мы будем использовать именно это название), функция обратного вызова и callback-функция. Такой функции нужно передать два параметра (их передаст сама GTK):
? GtkWidget *widget — виджит;
? gpointer data — данные.
Параметры, которые нужно передать обработчику, зависят от передаваемого сигнала. Например, если бы мы передавали не сигнал «destroy», а сигнал «delete-event», то нужно было бы указать уже три параметра:
? GtkWidget *widget — виджит;
? GdkEvent *event — событие;
? gpointer data — данные.
Вот наиболее часто используемые сигналы:
? button_press_event — нажата левая кнопка мыши;
? button_release_event — левая кнопка отпущена;
? motion_notify_event — движение мыши;
? delete_event — удаление объекта;
? destroy_event — уничтожение объекта;
? key_press_event — нажата клавиша клавиатуры;
? key_release_event — клавиша отпущена;
? enter_notify_event — указатель мыши вошел в пределы объекта;
? leave_notify_event — указатель мыши вышел за пределы объекта;
? focus_in_event — объект стал активным (получил фокус);
? focus_out_event — объект не активен;
? drag_begin_event — начало перемещения объекта;
? drag_request_event — запрос на перемещение объекта;
? drag_end_event — перемещение объекта;
? drop_enter_event — объект перемещен.
Наиболее часто используемые события GDK (используются в функции-обработчике) перечислены ниже:
? GDK_NOTHING — не произошло никакого события;
? GDK_DELETE — удаление;
? GDK_DESTROY — уничтожение;
? GDK_MOTION_NOTIFY — уведомление о перемещении;
? GDK_BUTTON_PRESS — нажата любая кнопка мыши;
? GDK_1BUTTON_PRESS — нажатие первой кнопки мыши;
? GDK_2BUTTON_PRESS — нажатие второй кнопки мыши;
? GDK_3BUTTON_PRESS — нажата третья кнопка;
? GDK_BUTTON_RELEASE — кнопка (любая) отпущена;
? GDK_KEY_PRESS — нажата клавиша;
? GDK_KEY_RELEASE — клавиша отпущена;
? GDK_ENTER_NOTIFY — указатель мыши в пределах объекта (виджита);
? GDK_LEAVE_NOTIFY — указатель мыши вышел за пределы виджита;
? GDK_FOCUS_CHANGE — изменения фокуса ввода;
? GDK_OTHER_EVENT — другое событие.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
10.2. Действия сигналов
10.2. Действия сигналов Каждый сигнал (вскоре мы представим полный список) имеет связанное с ним действие по умолчанию. POSIX обозначает это как диспозицию (disposition) сигнала. Это то действие, которое ядро осуществляет для процесса, когда поступает определенный сигнал. Действие
10.4.3. Игнорирование сигналов
10.4.3. Игнорирование сигналов Более практично, когда вызывается обработчик сигнала, это означает, что программа должна завершиться и выйти. Было бы раздражающим, если бы большинство программ по получении SIGINT выводили бы сообщение и продолжали работу; смысл сигнала в том,
Глава 12 Обработка сигналов
Глава 12 Обработка сигналов Сигналы — это простейшая форма межпроцессного взаимодействия в мире POSIX. Они позволят одному процессу быть прерванным асинхронным образом по инициативе другого процесса (или ядра) для того, чтобы обработать какое-то событие. Обработав сигнал,
12.1. Концепция сигналов
12.1. Концепция сигналов 12.1.1. Жизненный цикл сигнала Сигналы имеют четко определенный жизненный цикл: они создаются, сохраняются до тех пор, пока ядро не выполнит определенное действие на основе сигнала, а затем вызывают совершение этого действия. Создание сигнала
12.2.3. Перехват сигналов
12.2.3. Перехват сигналов Вместо использования функции signal() (чья семантика в процессе эволюции стала неправильной) POSIX-программы регистрируют обработчики сигналов с помощью sigaction().#include <signal.h>int sigaction(int signum, struct sigaction *act, struct sigaction *oact);Этот системный вызов устанавливает
12.2.6. Ожидание сигналов
12.2.6. Ожидание сигналов Когда программа построена преимущественно вокруг сигналов, часто необходимо, чтобы она ожидала появления какого-то сигнала, прежде чем продолжать работу. Системный вызов pause() предоставляет простую возможность для этого.#include <unistd.h>int
12.3.1. Описание сигналов
12.3.1. Описание сигналов Иногда приложения нуждаются в описании сигнала для отображения пользователю или помещения в журнал. Существуют три способа сделать это (см. главу 9). К сожалению, ни один из них не стандартизован.Самый старый метод предусматривает применение sys_siglist
15.1.3. Обработка сигналов управления заданиями
15.1.3. Обработка сигналов управления заданиями Хотя многие приложения можно останавливать и перезапускать без побочных эффектов, другим процессам требуется обрабатывать состояния останова и запуска. Например, большинству редакторов необходимо модифицировать параметры
5.8. Обработка сигналов POSIX
5.8. Обработка сигналов POSIX Сигнал — это уведомление процесса о том, что произошло некое событие. Иногда сигналы называют программными прерываниями (software interrupts). Подразумевается, что процесс не знает заранее о том, когда придет сигнал.Сигналы могут посылаться в следующих
7.2.1 Обработка сигналов
7.2.1 Обработка сигналов Ядро обрабатывает сигналы в контексте того процесса, который получает их, поэтому чтобы обработать сигналы, нужно запустить процесс. Существует три способа обработки сигналов: процесс завершается по получении сигнала, не обращает внимание на
19.7.9. Обработка сигналов и протоколирование
19.7.9. Обработка сигналов и протоколирование Возможно, вы хотите обеспечить выполнение вашего сценария после выхода пользователя из интерпретатора или выполнить какие-нибудь действия при отключении удаленного пользователя от системы. «Перехватить» сигнал (прерывание)
8.7. Обработка сигналов и протоколирование
8.7. Обработка сигналов и протоколирование Обычно при завершении сеанса работы пользователя система посылает всем запущенным им процессам сигналы (п.3.3.2), которые приводят к прекращению этих процессов. Возможно, вам понадобится обеспечить своему сценарию возможность
23.3.4. Обработка сигналов
23.3.4. Обработка сигналов Перед тем, как перейти к следующему пункту, нужно еще раз рассмотреть функцию gtk_signal_connect(). Данной функции нужно передать четыре параметра:? GtkObject *object — объект, которому может быть послан сигнал;? const gchar *name — имя сигнала, например, «destroy»;? GtkSignalFunc func
Перехват сигналов
Перехват сигналов Вы можете использовать встроенную в bash программу trap для перехвата сигналов в своих программах. Это хороший способ изящно завершать работу программы. Например, если пользователь, когда ваша программа работает, нажмет CTRL-C — программе будет отправлен
26.3.4. Игнорирование сигналов
26.3.4. Игнорирование сигналов Когда пользователь регистрируется в системе, просматривается файл /etc/profile; нежелательно, чтобы пользователь прерывал этот процесс. Обычно задается перехват, или игнорирование, сигналов 1, 2, 3 и 15, но потом при просмотре сообщения motd (ежедневного