IOCommandGate
Однопоточный клиент цикла работы запрашивает механизм.
Экземпляр IOCommandGate является чрезвычайно легким путем механизм, выполняющий действие с водительским циклом работы. 'На цикле работы' фактически ложь, но единственный цикл работы распараллелил семантический, сохраняется для этого источника события. Используя логический элемент цикла работы, а не выполнение workloop. Логический элемент команды тестирует на потенциал сам мертвая блокировка путем проверки, выполнен ли запрос runCommand от потока цикла работы, это не проверяет на взаимную мертвую блокировку хотя где пара мертвой блокировки цикла работы друг друга.
IOCommandGate является более легкой версией веса IOCommandQueue и должен использоваться в предпочтении. Обычно используйте очередь команды каждый раз, когда Вам нужен клиент для подачи запроса к циклу работы. Типичное действие логического элемента команды проверило бы, активны ли аппаратные средства, раз так это добавит запрос к незаконченной очереди, внутренней к устройству или семейству устройства. Иначе, если аппаратные средства неактивны тогда, на этот запрос можно сразу реагировать.
CAUTION: runAction, runCommand, и функции attemptCommand нельзя вызвать от контекста прерывания.
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Не применимый
Objective C
@import Kernel;
Доступность
Доступный в OS X v10.0 и позже.
-
Единственный поток вызов к действию с целевым циклом работы.
Объявление
C++
virtual IOReturn attemptAction( Actionaction, void *arg0 = 0, void *arg1 = 0, void *arg2 = 0, void *arg3 = 0);Параметры
actionУказатель для функционирования, чтобы быть выполненным в контексте цикла работы.
arg0Параметр для параметра действия, значений по умолчанию к 0.
arg1Параметр для параметра действия, значений по умолчанию к 0.
arg2Параметр для параметра действия, значений по умолчанию к 0.
arg3Параметр для параметра действия, значений по умолчанию к 0.
Возвращаемое значение
kIOReturnSuccess в случае успеха. kIOReturnBadArgument, если действие не определяется, kIOReturnNotPermitted, если этот источник события в настоящее время отключается, kIOReturnCannotLock, если попытка блокировки перестала работать.
Обсуждение
Клиентская функция, заставляющая данное действие быть вызванным единственным потоковым способом. Остерегайтесь логический элемент цикла работы является рекурсивным, и логические элементы команды могут вызвать прямую или косвенную повторную входимость. Если логический элемент цикла работы будет закрыт, когда выполнение на потоке клиента attemptCommand перестанет работать.
-
Единственный поток команда с целевым циклом работы.
Объявление
C++
virtual IOReturn attemptCommand( void *arg0 = 0, void *arg1 = 0, void *arg2 = 0, void *arg3 = 0);Параметры
arg0Параметр для действия логического элемента команды, значений по умолчанию к 0.
arg1Параметр для действия логического элемента команды, значений по умолчанию к 0.
arg2Параметр для действия логического элемента команды, значений по умолчанию к 0.
arg3Параметр для действия логического элемента команды, значений по умолчанию к 0.
Возвращаемое значение
kIOReturnSuccess в случае успеха. kIOReturnNotPermitted, если этот источник события в настоящее время отключается, kIOReturnNoResources, если никакое доступное действие, kIOReturnCannotLock, если попытка блокировки перестала работать.
Обсуждение
Клиентская функция, заставляющая текущее действие быть вызванным единственным потоковым способом. Если логический элемент цикла работы будет закрыт, когда выполнение на потоке клиента attemptCommand перестанет работать.
-
Метод фабрики создать и инициализировать IOCommandGate, Посмотрите $link init.
Объявление
C++
static IOCommandGate *commandGate( OSObject *owner, Action action = 0);Возвращаемое значение
Возвращает указатель на новый логический элемент команды, если успешный, 0 иначе.
-
commandSleep (недействительный *, AbsoluteTime, UInt32) - commandSleep (недействительный *, AbsoluteTime, UInt32)Поместите поток, в настоящее время содержащий логический элемент команды для сна.
Объявление
C++
virtual IOReturn commandSleep( void *event, AbsoluteTimedeadline, UInt32interruptible);Параметры
eventУказатель на адрес.
deadlineСрок часов к тайм-ауту сон.
interruptibleTHREAD_UNINT, THREAD_INTERRUPTIBLE или THREAD_ABORTSAFE. THREAD_UNINT указывает, что сон не может быть прерван сигналом. THREAD_INTERRUPTIBLE указывает, что сон может быть прерван, «уничтожают-9» сигналов. THREAD_ABORTSAFE указывает, что сон может быть прерван любым пользовательским сигналом.
Возвращаемое значение
Если вызывающий поток не содержит логический элемент команды, THREAD_AWAKENED - нормальное пробуждение, THREAD_TIMED_OUT - тайм-аут истек, THREAD_INTERRUPTED - прерванный, THREAD_RESTART - работа перезапуска полностью, kIOReturnNotPermitted.
Обсуждение
Поместите поток, чтобы спать, ожидая события, но выпустить логический элемент сначала. Если событие имеет место, или тайм-аут происходит тогда, commandGate закрывается перед функциональными возвратами.
-
Поместите поток, в настоящее время содержащий логический элемент команды для сна.
Объявление
C++
virtual IOReturn commandSleep( void *event, UInt32 interruptible =interruptible);Параметры
eventУказатель на адрес.
interruptibleTHREAD_UNINT, THREAD_INTERRUPTIBLE или THREAD_ABORTSAFE. THREAD_UNINT указывает, что сон не может быть прерван сигналом. THREAD_INTERRUPTIBLE указывает, что сон может быть прерван, «уничтожают-9» сигналов. THREAD_ABORTSAFE (значение по умолчанию) указывает, что сон может быть прерван любым пользовательским сигналом.
Возвращаемое значение
Если вызывающий поток не содержит логический элемент команды, THREAD_AWAKENED - нормальное пробуждение, THREAD_TIMED_OUT - тайм-аут истек, THREAD_INTERRUPTED - прерванный, THREAD_RESTART - работа перезапуска полностью, kIOReturnNotPermitted.
Обсуждение
Поместите поток, чтобы спать, ожидая события, но выпустить логический элемент сначала. Если событие имеет место тогда, commandGate закрывается перед функциональными возвратами.
-
Пробуждение один или несколько потоков, спящих на событии.
Объявление
C++
virtual void commandWakeup( void *event, bool oneThread = false);Параметры
eventУказатель на адрес.
onlyOneThreadистина, чтобы только разбудить самое большее один поток, ложь иначе.
-
Отключите логический элемент команды
Объявление
C++
virtual void disable();Обсуждение
Когда логический элемент команды будет отключен, все будущие вызовы к runAction и runCommand остановятся, пока логический элемент не, включают () d позже. Когда системный сон требуют, это может использоваться для блокирования клиентских потоков. Сам поток IOWorkLoop никогда не будет останавливаться, сделав runAction/runCommand звонки. Этот вызов должен быть выполнен от запертого контекста, для очистки потенциальных условий состязания.
-
Включите логический элемент команды, это разблокирует любые блокированные Команды и Действия.
Объявление
C++
virtual void enable();Обсуждение
Включите логический элемент команды. Вызовы attemptAction/attemptCommand будут теперь включены и могут успешно выполниться. Остановленные вызовы runCommand/runAction будут разбужены.
-
Инициализатор класса.
Объявление
C++
virtual bool init( OSObject *owner, Action action = 0);Параметры
ownerВладелец этого, недавно создаваемого, экземпляр IOCommandGate. Этот параметр будет использоваться в качестве первого параметра в выноске действия.
actionУказатель на функцию C, вызванную каждый раз, когда клиент IOCommandGate вызывает runCommand. NB Может быть функцией членства C++, но вызывающая сторона должна бросить функцию членства к $link IOCommandGate:: Действие и они получат предупреждение компилятора. Значения по умолчанию для обнуления посмотрите $link IOEventSource:: setAction.
Возвращаемое значение
Истина, если наследованные классы инициализируют успешно.
Обсуждение
Инициализатор для IOCommandGate воздействует только на недавно 'newed' объекты. Не должен привыкнуть к re-init существующий экземпляр.
-
Единственный поток вызов к действию с целевым циклом работы.
Объявление
C++
virtual IOReturn runAction( Actionaction, void *arg0 = 0, void *arg1 = 0, void *arg2 = 0, void *arg3 = 0);Параметры
actionУказатель для функционирования, чтобы быть выполненным в контексте цикла работы.
arg0Параметр для параметра действия, значений по умолчанию к 0.
arg1Параметр для параметра действия, значений по умолчанию к 0.
arg2Параметр для параметра действия, значений по умолчанию к 0.
arg3Параметр для параметра действия, значений по умолчанию к 0.
Возвращаемое значение
kIOReturnSuccess в случае успеха. kIOReturnBadArgument, если действие не определяется, kIOReturnAborted, если отключенный логический элемент команды свободен () редактор прежде чем быть повторно включенным.
Обсуждение
Клиентская функция, заставляющая данное действие быть вызванным единственным потоковым способом. Остерегайтесь логический элемент цикла работы является рекурсивным, и логические элементы команды могут вызвать прямую или косвенную повторную входимость. То, когда выполнение на потоке клиента runAction будет спать, пока логический элемент цикла работы не откроется для выполнения клиентских действий, действие является единственным, распараллелило против всех других источников событий цикла работы. Если команда будет отключена, то попытка выполнить команду будет остановлена, до включают, вызывается.
-
Единственный поток команда с целевым циклом работы.
Объявление
C++
virtual IOReturn runCommand( void *arg0 = 0, void *arg1 = 0, void *arg2 = 0, void *arg3 = 0);Параметры
arg0Параметр для действия логического элемента команды, значений по умолчанию к 0.
arg1Параметр для действия логического элемента команды, значений по умолчанию к 0.
arg2Параметр для действия логического элемента команды, значений по умолчанию к 0.
arg3Параметр для действия логического элемента команды, значений по умолчанию к 0.
Возвращаемое значение
kIOReturnSuccess в случае успеха. kIOReturnAborted, если отключенный логический элемент команды свободен () редактор прежде чем быть повторно включенным, kIOReturnNoResources если никакое доступное действие.
Обсуждение
Клиентская функция, заставляющая текущее действие быть вызванным единственным потоковым способом. Остерегайтесь логический элемент цикла работы является рекурсивным, и логические элементы команды могут вызвать прямую или косвенную повторную входимость. То, когда выполнение на потоке клиента runCommand будет спать, пока логический элемент цикла работы не откроется для выполнения клиентских действий, действие является единственным, распараллелило против всех других источников событий цикла работы. Если команда будет отключена, то попытка выполнить команду будет остановлена, до включают, вызывается.
-
Объявление
C++
typedef IOReturn ( *Action)( OSObject *owner, void *arg0, void *arg1, void *arg2, void *arg3);Параметры
ownerTarget функции, может использоваться в качестве refcon. Владелец установлен во время инициализации экземпляра IOCommandGate. Отметьте, была ли функция C++ указана, этот параметр является неявно первым paramter в списке параметров целевой функции членства.
arg0Параметр действию от выполненной работы.
arg1Параметр действию от выполненной работы.
arg2Параметр действию от выполненной работы.
arg3Параметр действию от выполненной работы.
Обсуждение
Тип и параметры выноски C функция, использующаяся, когда runCommand выполняется клиентом. Бросок к этому типу, когда Вы хотите, чтобы использовалась функция членства C++. Обратите внимание на то, что arg1 - arg3 параметры являются прямыми, проходят от runCommand до выноски действия.
Оператор импорта
Objective C
#include <IOCommandGate.h>;Доступность
Доступный в OS X v10.0 через OS X v10.5.
-
Объявление
C++
struct ExpansionData { };Обсуждение
Эта структура будет использоваться для расширения capablilties IOWorkLoop в будущем.
-
Зарезервированный для будущего использования. (Только внутреннее использование)
Объявление
C++
ExpansionData *reserved;
