IOEventSource
Абстрактный класс для всех источников событий цикла работы.
IOEventSource объявляет абстрактный суперкласс, который все источники событий должны наследовать от того, если IOWorkLoop должен получить события от них.
Источник события может представлять любое событие, которое должно заставить цикл работы устройства просыпаться и выполнять работу. Двумя примерами источников событий является IOInterruptEventSource, поставляющий уведомления прерывания и IOCommandGate, поставляющий запросы команды.
Модуль ядра может всегда использовать модель цикла работы для сериализации доступа к чему-либо вообще. IOEventSource используется для передачи событий к циклу работы, и цепочка источников событий должна использоваться для обхода возможных источников событий и demultipex их. Обратите внимание на то, что определенный экземпляр источника события может только быть элементом 1 цепочки связанного списка. Если необходимо переместить его между цепочками, чем удостоверяются, что это удалено из исходной цепочки прежде, чем попытаться переместить его.
IOEventSource не предпринимает попытки поддержать непротиворечивость ее внутренних данных через многопоточность. Предполагается, что пользователь этих основных инструментов защитит данные, что эти объекты представляют в своего рода устройстве широкую блокировку экземпляра. Например, IOWorkLoop поддерживает цепь событий при помощи IOCommandGate и таким образом единственного доступа поточной обработки к его состоянию.
Все подклассы IOEventSource, хотящих выполнить работу над потоком цикла работы, как ожидают, реализуют checkForWork () функция членства. С Mac OS X, 10.7 (Дарвин 11), checkForWork больше не не чист виртуальный, и не должен быть переопределен, если нет никакой работы, которая будет сделана.
checkForWork () является ключевым методом в этом классе. Это вызывает некоторый цикл работы, когда convienient и, как ожидают, оценит свое внутреннее состояние и определит, имело ли событие место начиная с последней возможности. В случае события, происходившего тогда, экземпляр определил цель (владелец)/, действие вызовут. Действие сохранено как обычный указатель функции C, но первый параметр всегда является владельцем. Это означает, что функция членства C++ может использоваться в качестве функции действия, хотя это зависит от ABI.
Несмотря на то, что eventChainNext переменная содержит ссылку на следующий источник события в цепочке, эта ссылка не сохраняется. Список 'владелец' т.е. клиент, создающий событие, не цикл работы, как ожидают, сохранит источник.
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Не применимый
Objective C
@import Kernel;
Доступность
Доступный в OS X v10.0 и позже.
-
Виртуальная функция членства используется IOWorkLoop для планирования работы.
Объявление
C++
virtual bool checkForWork();
Возвращаемое значение
Возвратите true, если эта функция должна быть вызвана снова, прежде чем все ее выдающиеся события были обработаны.
Обсуждение
Эта функция будет вызвана, чтобы запросить подкласс проверить свое внутреннее состояние на любую работу, чтобы сделать и затем вызвать владельца/действие. Если этот источник события никогда не выполняет работы (например, IOCommandGate), этот метод не должен быть переопределен.Примечание: Этот метод больше не объявляется чистый виртуальный. Реализация по умолчанию предоставлена в IOEventSource.
-
Отключите источник события.
Объявление
C++
virtual void disable();
Обсуждение
Когда checkForWork вызовут, реализация подкласса, как ожидают, будет уважать включенное состояние.
-
Включите источник события.
Объявление
C++
virtual void enable();
Обсуждение
Когда checkForWork вызовут, реализация подкласса, как ожидают, будет уважать включенное состояние. Вызывание этой функции заставит цикл работы быть сообщенным так, чтобы был выполнен checkForWork.
-
Get'ter для переменной действия $link.
Объявление
C++
virtual IOEventSource::Action getAction() const;
Возвращаемое значение
значение действия.
-
Get'ter за $link eventChainNext переменная.
Объявление
C++
virtual IOEventSource *getNext() const;
Возвращаемое значение
значение eventChainNext.
-
Get'ter за $link workLoop переменная.
Объявление
C++
virtual IOWorkLoop *getWorkLoop() const;
Возвращаемое значение
значение workLoop.
-
Основной инициализатор для класса IOEventSource.
Объявление
C++
virtual bool init( OSObject *
owner
, IOEventSource::Action action = 0);Параметры
owner
Владелец этого экземпляра источника события. Используемый в качестве первого параметра выноски действия. Владелец обычно будет OSObject, которым это не должно быть, поскольку никакие функции членства не вызовут непосредственно в нем. Это может просто быть refcon для клиентской подпрограммы.
action
Указатель на C вызывает функцию. Действие является указателем на функцию C, вызванную, когда этот источник события имеет невыполненную работу. Это будет обычно вызывать checkForWork функция членства. Первый параметр действия вызывает, всегда будет владелец, это позволяет функциям членства C++ использоваться в качестве действий. Значения по умолчанию к 0.
Возвращаемое значение
истина, если наследованные классы и этот экземпляр инициализируют успешно.
-
Get'ter за $link включают переменную.
Объявление
C++
virtual bool isEnabled() const;
Возвращаемое значение
истина, если включено.
-
Функция удобства для workLoop-> onThread.
Объявление
C++
virtual bool onThread() const;
Возвращаемое значение
истина, если обращено поток цикла работы.
-
Set'ter для переменной действия $link.
Объявление
C++
virtual void setAction( IOEventSource::Action
action
);Параметры
action
Указатель на функцию C типа IOEventSource:: Действие.
-
Set'ter за $link eventChainNext переменная.
Объявление
C++
virtual void setNext( IOEventSource *
next
);Параметры
next
Указатель на другой экземпляр IOEventSource.
-
Set'ter за $link workLoop переменная.
Объявление
C++
virtual void setWorkLoop( IOWorkLoop *
workLoop
);Параметры
workLoop
Цикл работы Target этого экземпляра источника события. Подкласс IOWorkLoop, по крайней мере, реагирующего на signalWorkAvailable () и функции onThread.
-
Объявление
C++
typedef void ( *Action)( OSObject *owner, ...);
Параметры
owner
Target функции, может использоваться в качестве refcon. Владелец установлен во время инициализации. Отметьте, была ли функция C++ указана, этот параметр является неявно первым paramter в списке параметров целевой функции членства.
Обсуждение
Тип заполнителя для дискриминации перегрузки функции C++. Поскольку все источники событий требуют действия, и оно должно быть сохранено где-нибудь и иметь некоторый тип, это - тот тип.
Оператор импорта
Objective C
#include <IOCommandGate.h>;
Доступность
Доступный в OS X v10.0 через OS X v10.5.
-
Объявление
C++
struct ExpansionData { #if IOKITSTATS struct IOEventSourceCounter *counter; #else void *iokitstatsReserved; #endif };
Обсуждение
Эта структура будет использоваться для расширения capablilties IOEventSource в будущем.
-
Что является циклом работы для этого источника события.
Объявление
C++
IOWorkLoop *workLoop;
-
Зарезервированный для будущего использования. (Только внутреннее использование)
Объявление
C++
ExpansionData *reserved;
-
Что когда-либо клиент хочет сделать, посмотрите $link setRefcon.
Объявление
C++
void *refcon;
-
Когда событие было поставлено, объект владельца вызвал.
Объявление
C++
OSObject *owner;
-
Следующий источник события в конечном счете цепочка. ноль в конце цепочки.
Объявление
C++
IOEventSource *eventChainNext;
-
Этот источник события, позволенный поставлять запросы циклу работы.
Объявление
C++
bool enabled;
-
Когда событие было поставлено, метод действия вызвал
Объявление
C++
Action action;