IOCommandGate
Однопоточный клиент цикла работы запрашивает механизм.
Экземпляр IOCommandGate является чрезвычайно легким путем механизм, выполняющий действие с водительским циклом работы. 'На цикле работы' фактически ложь, но единственный цикл работы распараллелил семантический, сохраняется для этого источника события. Используя логический элемент цикла работы, а не выполнение workloop. Логический элемент команды тестирует на потенциал сам мертвая блокировка путем проверки, выполнен ли запрос runCommand от потока цикла работы, это не проверяет на взаимную мертвую блокировку хотя где пара мертвой блокировки цикла работы друг друга.
IOCommandGate является более легкой версией веса IOCommandQueue и должен использоваться в предпочтении. Обычно используйте очередь команды каждый раз, когда Вам нужен клиент для подачи запроса к циклу работы. Типичное действие логического элемента команды проверило бы, активны ли аппаратные средства, раз так это добавит запрос к незаконченной очереди, внутренней к устройству или семейству устройства. Иначе, если аппаратные средства неактивны тогда, на этот запрос можно сразу реагировать.
CAUTION: runAction, runCommand, и функции attemptCommand нельзя вызвать от контекста прерывания.
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Не применимый
Objective C
@import Kernel;
Доступность
Доступный в OS X v10.0 и позже.
-
Единственный поток вызов к действию с целевым циклом работы.
Объявление
C++
virtual IOReturn attemptAction( Action
action
, 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
Срок часов к тайм-ауту сон.
interruptible
THREAD_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
Указатель на адрес.
interruptible
THREAD_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( Action
action
, 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);
Параметры
owner
Target функции, может использоваться в качестве 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;