Событие (вычисления)
В программировании и проектировании программного обеспечения событие — это действие или событие, распознаваемое программным обеспечением , часто происходящее асинхронно из внешней среды, которое может быть обработано программным обеспечением. Компьютерные события могут генерироваться или инициироваться системой, пользователем или другими способами. Обычно события обрабатываются синхронно с потоком программы . То есть программное обеспечение может иметь одно или несколько выделенных мест для обработки событий, часто это цикл обработки событий .
Пользователь может быть источником события. Пользователь может взаимодействовать компьютера с программным обеспечением через периферийные устройства , например, печатая на клавиатуре или щелкая мышью. Другим источником является аппаратное устройство, такое как таймер . Программное обеспечение также может запускать собственный набор событий в цикле событий, например, сообщая о завершении задачи. Программное обеспечение, которое меняет свое поведение в ответ на события, называется событийно-управляемым , часто с целью обеспечения интерактивности .
Описание
[ редактировать ]Системы, управляемые событиями, обычно используются, когда существует какая-то асинхронная внешняя активность, которую необходимо обработать программе, например, когда пользователь нажимает кнопку мыши. Система, управляемая событиями, обычно запускает цикл событий , который ожидает таких действий, как входные данные от устройств или внутренние сигналы тревоги. Когда происходит одно из таких событий, он собирает данные о событии и отправляет его в программу- обработчик событий, которая будет его обрабатывать.
Программа может игнорировать события, и могут существовать библиотеки для отправки события нескольким обработчикам, которые могут быть запрограммированы на прослушивание определенного события. Данные, связанные с событием, как минимум определяют, какой это тип события, но могут включать и другую информацию, например, когда оно произошло, кто или что вызвало его возникновение, а также дополнительные данные, предоставляемые источником события обработчику о том, как произошло событие. событие должно быть обработано.
События обычно используются в пользовательских интерфейсах, где действия во внешнем мире (такие как щелчки мыши, изменение размера окна, нажатия клавиш и сообщения из других программ) обрабатываются программой как серия событий. Программы, написанные для многих оконных сред, состоят преимущественно из обработчиков событий.
События также могут использоваться на уровне набора команд , где они дополняют прерывания . По сравнению с прерываниями события обычно реализуются синхронно: программа явно ожидает создания и обработки события (обычно путем вызова инструкции, которая отправляет следующее событие), тогда как прерывание может потребовать немедленного обслуживания.
Пользовательские события
[ редактировать ]Существует множество ситуаций или событий, которые программа или система могут генерировать или на которые они могут реагировать. Некоторые распространенные события, генерируемые пользователем, включают в себя:
События мыши
[ редактировать ]Указательное устройство может генерировать ряд жестов указывающего устройства , распознаваемых программным обеспечением . Мышь может генерировать ряд событий мыши, таких как перемещение мыши (включая направление движения и расстояние), нажатие левой/правой кнопки мыши вверх/вниз. [1] и движение колесика мыши или сочетание этих жестов. Например, двойной щелчок обычно выделяет слова и символы внутри рамки, а тройной щелчок выделяет целые абзацы.
События клавиатуры
[ редактировать ]Нажатие клавиши на клавиатуре или комбинации клавиш генерирует событие клавиатуры, позволяя запущенной в данный момент программе реагировать на введенные данные, например, какую клавишу/клавиши нажал пользователь. [1]
События джойстика
[ редактировать ]Перемещение джойстика генерирует аналоговый сигнал XY. Они часто имеют несколько кнопок для запуска событий. В некоторых геймпадах популярных игровых приставок используются джойстики.
Сенсорные события
[ редактировать ]События, генерируемые с помощью сенсорного экрана, обычно называются событиями касания или жестами .
События устройства
[ редактировать ]События устройства включают в себя действия устройства или по отношению к нему, такие как встряхивание, наклон, вращение или перемещение.
Модель делегирования событий
[ редактировать ]Распространенным вариантом в объектно-ориентированном программировании является модель событий делегата , которая предоставляется некоторыми графическими пользовательскими интерфейсами . Эта модель основана на трех сущностях:
- элемент управления, который является источником событий
- прослушиватели , также называемые обработчиками событий , которые получают уведомление о событии от источника
- интерфейсы (в более широком смысле этого слова), которые описывают протокол , по которому должно передаваться событие.
Кроме того, модель требует, чтобы:
- каждый слушатель должен реализовать интерфейс для события , которое он хочет прослушивать
- каждый слушатель должен зарегистрироваться у источника, чтобы заявить о своем желании прослушать событие
- каждый раз, когда источник генерирует событие, он передает его зарегистрированным слушателям в соответствии с протоколом интерфейса.
C# использует события как специальные делегаты, которые могут быть запущены только классом, который их объявляет. Это позволяет улучшить абстракцию , например: [2]
delegate void Notifier (string sender);
class Model
{
public event Notifier notifyViews;
public void Change() { ... notifyViews("Model"); }
}
class View1
{
public View1(Model model)
{
model.notifyViews += new Notifier(this.Update1);
}
void Update1(string sender)
{
Console.WriteLine($"{sender} was changed during update");
}
}
class View2
{
public View2(Model model)
{
model.notifyViews += new Notifier(this.Update2);
}
void Update2(string sender)
{
Console.WriteLine($"{sender} was changed");
}
}
class Test
{
static void Main()
{
Model model = new Model();
new View1(model);
new View2(model);
model.Change();
}
}
Обработчик событий
[ редактировать ]В компьютерном программировании обработчик событий может быть реализован с использованием обратного вызова функции , которая обрабатывает входные данные, полученные в программе (называемые прослушивателем в Java и JavaScript). [3] ). Каждое событие представляет собой часть информации уровня приложения из базовой платформы , обычно из набора инструментов графического пользовательского интерфейса . К событиям графического пользовательского интерфейса относятся нажатия клавиш , движение мыши , выбор действий и таймеров истечение . На более низком уровне события могут представлять доступность новых данных для чтения файла или сетевого потока. Обработчики событий являются центральной концепцией в программировании, управляемом событиями .
События создаются платформой на основе интерпретации входных данных более низкого уровня, которые сами могут быть событиями более низкого уровня. Например, движения мыши и щелчки интерпретируются как выбор меню. События изначально возникают в результате действий на уровне операционной системы, таких как прерывания, генерируемые аппаратными устройствами, инструкции программного прерывания или изменения состояния при опросе . На этом уровне обработчики прерываний и обработчики сигналов соответствуют обработчикам событий.
Созданные события сначала обрабатываются диспетчером событий внутри платформы. Обычно он управляет связями между событиями и обработчиками событий и может ставить обработчики событий или события в очередь для последующей обработки. Диспетчеры событий могут напрямую вызывать обработчики событий или ждать, пока события будут исключены из очереди с информацией об обработчике, который будет выполнен.
Уведомление о событии
[ редактировать ]Уведомление о событии — это термин, используемый в сочетании с коммуникационным программным обеспечением для связи приложений, генерирующих небольшие сообщения («события»), с приложениями, которые отслеживают связанные условия и могут предпринимать действия, вызванные событиями.
Уведомление о событиях является важной функцией в современных системах баз данных (используется для информирования приложений о возникновении условий, за которыми они наблюдают), современных операционных системах (используется для информирования приложений, когда им следует выполнить какое-либо действие, например обновление окна) и современных распределенных системах. системы, в которых производитель события может находиться на другой машине, чем потребитель или потребители. Платформы уведомлений о событиях обычно проектируются таким образом, что приложению, создающему события, не нужно знать, какие приложения будут их использовать или даже сколько приложений будут отслеживать поток событий.
Уведомление о событиях иногда используется как синоним публикации-подписки — термина, который относится к одному классу продуктов, поддерживающих уведомление о событиях в сетевых настройках. Модель виртуальной синхронизации иногда используется для обеспечения систем уведомления о событиях и систем публикации-подписки более строгими гарантиями отказоустойчивости и согласованности.
См. также
[ редактировать ]- Обратный вызов (компьютерное программирование)
- Триггер базы данных
- DOM-события
- Программирование, управляемое событиями
- Обработка исключений
- Обработчик прерываний
- Прерывания
- Шаблон наблюдателя (например, прослушиватель событий)
- Шаблон «Реактор» и шаблон «Проактор»
- Программирование сигналов
- Виртуальная синхронизация
Ссылки
[ редактировать ]- ^ Jump up to: а б События мыши и клавиатуры в Windows Forms . Майкрософт. Проверено 12 февраля 2008 г.
- ^ Мессенбёк, Ханспетер (25 марта 2002 г.). «Расширенный C#: переменное количество параметров» (PDF) . Институт системного программного обеспечения, Университет Иоганна Кеплера, Линц, факультет компьютерных наук. п. 26 . Проверено 5 августа 2011 г.
- ^ «EventTarget.addEventListener() — Веб-API | MDN» . http://developer.mozilla.org . 11 марта 2024 г.
Внешние ссылки
[ редактировать ]- статей и функции обратного вызова Обработчики событий
- Высокоуровневый дизайн обработчика событий подфермы
- Синтаксис событий для XML
- Распределенные события и уведомления
- Порядок событий
Java DOM Interface Event
Javadoc- документацияjava.awt.event
Пакет Java Документация по API Javadocjavax.swing.event
Пакет Java Документация по API Javadoc- Напишите обработчик событий