Ссылка CFRunLoopSource
Объект CFRunLoopSource является абстракцией входного источника, который может быть помещен в цикл выполнения. Входные источники обычно генерируют асинхронные события, такие как сообщения, поступающие в сетевой порт или действия, выполняемые пользователем.
Входной исходный тип обычно определяет API для создания и работы на объектах типа, как будто это был отдельный объект от цикла выполнения, затем обеспечивает функцию для создания CFRunLoopSource для объекта. Источник цикла выполнения может тогда быть зарегистрирован в цикле выполнения и выступить в качестве посредника между циклом выполнения и фактическим входным исходным текстовым объектом. Примеры входных источников включают CFMachPort, CFMessagePort и CFSocket.
Существует две категории источников. Источники версии 0, так названные, потому что version поле их структуры контекста 0, управляются вручную приложением. То, когда источник готов стрелять, некоторая часть приложения, возможно кодировать на отдельном потоке, ожидающем события, должно вызвать CFRunLoopSourceSignal сказать цикл выполнения, что источник готов стрелять. Источник цикла выполнения для CFSocket в настоящее время реализуется как источник версии 0.
Источниками версии 1 управляют цикл выполнения и ядро. Когда источники готовы стрелять, эти источники используют порты Маха для сигнализации. Когда сообщение поступает в порт Маха источника, источник автоматически сообщен ядром. Когда источник запущен, содержание сообщения дано источнику для обработки. Источники цикла выполнения для CFMachPort и CFMessagePort в настоящее время реализуются как источники версии 1.
При создании собственного источника цикла выполнения можно выбрать, какая версия работает лучше всего на Вас.
Источник цикла выполнения может быть зарегистрирован в многократных циклах выполнения и выполненных режимах цикла одновременно. Когда источник сообщен, какой бы ни выполненный цикл, который, оказывается, обнаруживает сигнал сначала, запустит источник. Добавление источника к циклам выполнения многократных потоков может использоваться для управления пулом потоков «работника», обрабатывающим дискретные наборы данных, такие как сообщения клиент-сервер по сети или записям в очереди заданий, заполненной потоком «менеджера». Когда сообщения поступают, или задания добавляются к очереди, источник сообщен, и случайный поток получает и обрабатывает запрос.
-
Создает объект CFRunLoopSource.
Объявление
Swift
func CFRunLoopSourceCreate(_allocator: CFAllocator!, _order: CFIndex, _context: UnsafeMutablePointer<CFRunLoopSourceContext>) -> CFRunLoopSource!Objective C
CFRunLoopSourceRef CFRunLoopSourceCreate ( CFAllocatorRef allocator, CFIndex order, CFRunLoopSourceContext *context );Параметры
allocatorСредство выделения для использования для выделения памяти для нового объекта. Передача
NULLилиkCFAllocatorDefaultиспользовать текущее средство выделения по умолчанию.orderПоказатель приоритета, указывающий порядок, в котором обрабатываются выполненные источники цикла. Когда многократные источники цикла выполнения стреляют в единственную передачу через цикл выполнения, источники обрабатываются в увеличивающемся порядке этого параметра. Если цикл выполнения установлен обработать только один источник на цикл, только самый высокий приоритетный источник, тот с самым низким
orderоцените, обрабатывается. Это значение проигнорировано для источников версии 1. Передайте 0, если нет причина сделать иначе.contextСтруктура, содержащая контекстную информацию для источника цикла выполнения. Функция копирует информацию из структуры, таким образом, память, которой указывают
contextне должен сохраняться вне вызова функции.Возвращаемое значение
Новый объект CFRunLoopSource. Вы ответственны за выпуск этого объекта.
Обсуждение
Источник цикла выполнения автоматически не добавляется к циклу выполнения. Владение соблюдает Создать Правило.
Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.0 и позже.
-
Возвращает контекстную информацию для объекта CFRunLoopSource.
Объявление
Swift
func CFRunLoopSourceGetContext(_source: CFRunLoopSource!, _context: UnsafeMutablePointer<CFRunLoopSourceContext>)Objective C
void CFRunLoopSourceGetContext ( CFRunLoopSourceRef source, CFRunLoopSourceContext *context );Параметры
sourceИсточник цикла выполнения для исследования.
contextУказатель тот, на структуру, в который контекстная информация для
sourceдолжен быть скопирован. Возвращаемой информацией является та же информация, переданнаяCFRunLoopSourceCreateпри созданииsource.Обсуждение
Выполненные источники цикла прибывают в две версии с разного размера структурами контекста.
contextдолжен указать на правильную версию структуры дляsource. Прежде, чем вызвать эту функцию, необходимо инициализироватьversionэлементcontextс номером версии (или 0 или 1)source.Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.0 и позже.
-
Возвращает параметр упорядочивания для объекта CFRunLoopSource.
Объявление
Swift
func CFRunLoopSourceGetOrder(_source: CFRunLoopSource!) -> CFIndexObjective C
CFIndex CFRunLoopSourceGetOrder ( CFRunLoopSourceRef source );Параметры
sourceИсточник цикла выполнения для исследования.
Возвращаемое значение
Параметр упорядочивания для
source, который цикл выполнения использует (только для источников версии 0) для определения порядка, в котором обрабатываются источники, когда стреляют многократные источники.Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.0 и позже.
-
Возвращает идентификатор типа CFRunLoopSource непрозрачный тип.
Объявление
Swift
func CFRunLoopSourceGetTypeID() -> CFTypeIDObjective C
CFTypeID CFRunLoopSourceGetTypeID ( void );Возвращаемое значение
Идентификатор типа для CFRunLoopSource непрозрачный тип.
Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.0 и позже.
-
Лишает законной силы объект CFRunLoopSource, останавливая его от когда-либо увольнения снова.
Объявление
Swift
func CFRunLoopSourceInvalidate(_source: CFRunLoopSource!)Objective C
void CFRunLoopSourceInvalidate ( CFRunLoopSourceRef source );Параметры
sourceИсточник цикла выполнения для лишения законной силы.
Обсуждение
После того, как лишенный законной силы,
sourceникогда не будет запускать и вызывать выполнять функцию обратного вызова снова. Эта функция автоматически удаляетsourceот всех режимов цикла выполнения, в которых это было зарегистрировано. Еслиsourceисточник версии 0, это вызовы функцииcancelфункция обратного вызова, когда это удалено из каждого режима цикла выполнения. Память дляsourceне освобожден, если цикл выполнения не содержал единственную ссылку наsource.Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.0 и позже.
-
Возвращает булево значение, указывающее, допустим ли объект CFRunLoopSource и в состоянии стрелять.
Объявление
Swift
func CFRunLoopSourceIsValid(_source: CFRunLoopSource!) -> BooleanObjective C
Boolean CFRunLoopSourceIsValid ( CFRunLoopSourceRef source );Параметры
sourceИсточник цикла выполнения для исследования.
Возвращаемое значение
trueеслиsourceдопустимо, иначеfalse.Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.0 и позже.
-
Сигнализирует объект CFRunLoopSource, отмечая его как готовый стрелять.
Объявление
Swift
func CFRunLoopSourceSignal(_source: CFRunLoopSource!)Objective C
void CFRunLoopSourceSignal ( CFRunLoopSourceRef source );Параметры
sourceИсточник цикла выполнения для сигнализации.
Обсуждение
Эта функция не имеет никакого эффекта на источники версии 1, автоматически обрабатывающиеся, когда сообщения Маха поступают для них. После сигнализации источника версии 0 необходимо вызвать
CFRunLoopWakeUpна одном из циклов выполнения, в которых источник регистрируется для обрабатывания источника сразу.Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.0 и позже.
-
Когда версия 0 объект CFRunLoopSource удалена из режима цикла выполнения, обратный вызов вызвал.
Объявление
Objective C
typedef void (*CFRunLoopCancelCallBack) ( void *info, CFRunLoopRef rl, CFStringRef mode );Параметры
infoinfoэлементCFRunLoopSourceContextструктура, использовавшаяся при создании источника цикла выполнения.rlЦикл выполнения, из которого удаляется источник цикла выполнения.
modeРежим цикла выполнения, из которого удаляется источник цикла выполнения.
Обсуждение
Вы указываете этот обратный вызов в
CFRunLoopSourceContextструктура при создании источника цикла выполнения. -
Обратный вызов, вызванный для тестирования двух объектов CFRunLoopSource на равенство.
Объявление
Objective C
typedef Boolean (*CFRunLoopEqualCallBack) ( const void *info1, const void *info2 );Параметры
info1infoэлементCFRunLoopSourceContextилиCFRunLoopSourceContext1структура, использовавшаяся при создании источника цикла первого показа для тестирования.info2infoэлементCFRunLoopSourceContextилиCFRunLoopSourceContext1структура, использовавшаяся при создании второго источника цикла выполнения для тестирования.Возвращаемое значение
trueеслиinfo1иinfo2должен считаться равным; иначеfalse.Обсуждение
Вы указываете этот обратный вызов в
CFRunLoopSourceContextилиCFRunLoopSourceContext1структура при создании источника цикла выполнения. -
Обратный вызов, вызванный для получения порта собственного компонента Маха, представленного версией 1 объект CFRunLoopSource.
Объявление
Objective C
typedef mach_port_t (*CFRunLoopGetPortCallBack) ( void *info );Параметры
infoinfoэлементCFRunLoopSourceContext1структура, использовавшаяся при создании источника цикла выполнения.Возвращаемое значение
Порт собственного компонента Маха для источника цикла выполнения.
Обсуждение
Этот обратный вызов вызывают каждый раз, когда циклу выполнения нужен порт Маха источника, который может произойти в каждой итерации цикла цикла выполнения. Из-за частоты, с которой цикл выполнения может вызвать этот обратный вызов, сделайте функцию максимально эффективной.
Версия 1 работает, источник цикла должен иметь непосредственное отношение между собой и его портом Маха. Каждый источник должен иметь только один порт Маха, связанный с ним, и каждый порт Маха должен представлять только один источник.
Вы указываете этот обратный вызов в
CFRunLoopSourceContext1структура при создании источника цикла выполнения. -
Обратный вызов, вызванный для вычислений хэш-кода для
infoуказатель объекта CFRunLoopSource.Объявление
Objective C
typedef CFHashCode (*CFRunLoopHashCallBack) ( const void *info );Параметры
infoinfoэлементCFRunLoopSourceContextилиCFRunLoopSourceContext1структура, использовавшаяся при создании источника цикла выполнения.Возвращаемое значение
Значение хэш-кода для
info.Обсуждение
Если обратный вызов хеша не предоставлен для источника,
infoуказатель используется.Вы указываете этот обратный вызов в
CFRunLoopSourceContextилиCFRunLoopSourceContext1структура при создании источника цикла выполнения. -
Обратный вызов, вызванный, чтобы обработать и дополнительно ответить на сообщение, полученное на версии 1 объекту CFRunLoopSource (Мах основанные на порте источники).
Объявление
Objective C
typedef void *(*CFRunLoopMachPerformCallBack) ( void *msg, CFIndex size, CFAllocatorRef allocator, void *info );Параметры
msgСообщение Маха получено на порту Маха. Указатель к a
mach_msg_header_tструктура. Метка конца формата версии 0 (mach_msg_format_0_trailer_t) в конце сообщения Маха.sizeРазмер Маха обменивается сообщениями в
msg, исключая метку конца сообщения.allocatorОбъект-распределитель, который должен использоваться для выделения ответного сообщения.
infoinfoэлементCFRunLoopSourceContext1структура, использовавшаяся при создании источника цикла выполнения.Возвращаемое значение
Дополнительный Мах обменивается сообщениями, чтобы быть отправленным в ответ на полученное сообщение. Сообщение должно быть выделено с помощью
allocator. ВозвратитьсяNULLесли Вы хотите пустой ответ, возвращенный к отправителю.Обсуждение
Только необходимо обеспечить этот обратный вызов при создании собственной версии 1 выполненный источник цикла. CFMachPort и CFMessagePort работают, источники цикла уже реализуют этот обратный вызов для передачи полученного сообщения к собственной функции обратного вызова CFMachPort или CFMessagePort, которую действительно необходимо реализовать.
Вы указываете этот обратный вызов в
CFRunLoopSourceContext1структура при создании источника цикла выполнения. -
Когда сообщение получено на версии 0 объект CFRunLoopSource, обратный вызов вызвал.
Объявление
Objective C
typedef void (*CFRunLoopPerformCallBack) ( void *info );Параметры
infoinfoэлементCFRunLoopSourceContextструктура, использовавшаяся при создании источника цикла выполнения.Обсуждение
Только необходимо обеспечить этот обратный вызов при создании собственной версии 0 выполненный источник цикла. CFSocket работают, источники цикла уже реализуют этот обратный вызов для передачи полученного сообщения к собственной функции обратного вызова CFSOCKET, которую действительно необходимо реализовать.
Вы указываете этот обратный вызов в
CFRunLoopSourceContextструктура при создании источника цикла выполнения. -
Когда версия 0 объект CFRunLoopSource добавляется к режиму цикла выполнения, обратный вызов вызвал.
Объявление
Objective C
typedef void (*CFRunLoopScheduleCallBack) ( void *info, CFRunLoopRef rl, CFStringRef mode );Параметры
infoinfoэлементCFRunLoopSourceContextструктура, использовавшаяся при создании источника цикла выполнения.rlЦикл выполнения, в котором планируется источник.
modeРежим цикла выполнения, в котором планируется источник.
Обсуждение
Вы указываете этот обратный вызов в
CFRunLoopSourceContextструктура при создании источника цикла выполнения.
-
Структура, содержащая определенные с помощью программы данные и обратные вызовы, с которыми можно сконфигурировать поведение CFRunLoopSource версии 0.
Объявление
Swift
struct CFRunLoopSourceContext { var version: CFIndex var info: UnsafeMutablePointer<Void> var retain: CFunctionPointer<((UnsafePointer<Void>) -> UnsafePointer<Void>)> var release: CFunctionPointer<((UnsafePointer<Void>) -> Void)> var copyDescription: CFunctionPointer<((UnsafePointer<Void>) -> Unmanaged<CFString>!)> var equal: CFunctionPointer<((UnsafePointer<Void>, UnsafePointer<Void>) -> Boolean)> var hash: CFunctionPointer<((UnsafePointer<Void>) -> CFHashCode)> var schedule: CFunctionPointer<((UnsafeMutablePointer<Void>, CFRunLoop!, CFString!) -> Void)> var cancel: CFunctionPointer<((UnsafeMutablePointer<Void>, CFRunLoop!, CFString!) -> Void)> var perform: CFunctionPointer<((UnsafeMutablePointer<Void>) -> Void)> }Objective C
struct CFRunLoopSourceContext { CFIndex version; void *info; CFAllocatorRetainCallBack retain; CFAllocatorReleaseCallBack release; CFAllocatorCopyDescriptionCallBack copyDescription; CFRunLoopEqualCallBack equal; CFRunLoopHashCallBack hash; CFRunLoopScheduleCallBack schedule; CFRunLoopCancelCallBack cancel; CFRunLoopPerformCallBack perform; }; typedef struct CFRunLoopSourceContext CFRunLoopSourceContext;Поля
versionНомер версии структуры. Должен быть 0.
infoПроизвольный указатель на определенные с помощью программы данные, которые могут быть связаны с CFRunLoopSource во время создания. Этот указатель передается всем обратным вызовам, определенным в контексте.
retainСохранить обратный вызов для Вашего определенного с помощью программы
infoуказатель. Может бытьNULL.releaseОбратный вызов выпуска для Вашего определенного с помощью программы
infoуказатель. Может бытьNULL.copyDescriptionОбратный вызов описания копии для Вашего определенного с помощью программы
infoуказатель. Может бытьNULL.equalТестовый обратный вызов равенства для Вашего определенного с помощью программы
infoуказатель. Может бытьNULL.hashОбратный вызов вычисления хеша для Вашего определенного с помощью программы
infoуказатель. Может бытьNULL.scheduleОбратный вызов планирования для источника цикла выполнения. Когда источник добавляется к режиму цикла выполнения, этот обратный вызов вызывают. Может быть
NULL.cancelОбратный вызов отмены для источника цикла выполнения. Когда источник удален из режима цикла выполнения, этот обратный вызов вызывают. Может быть
NULL.performВыполнять обратный вызов для источника цикла выполнения. Когда источник стрелял, этот обратный вызов вызывают.
Доступность
Доступный в OS X v10.0 и позже.
-
Структура, содержащая определенные с помощью программы данные и обратные вызовы, с которыми можно сконфигурировать поведение CFRunLoopSource версии 1.
Объявление
Swift
struct CFRunLoopSourceContext1 { var version: CFIndex var info: UnsafeMutablePointer<Void> var retain: CFunctionPointer<((UnsafePointer<Void>) -> UnsafePointer<Void>)> var release: CFunctionPointer<((UnsafePointer<Void>) -> Void)> var copyDescription: CFunctionPointer<((UnsafePointer<Void>) -> Unmanaged<CFString>!)> var equal: CFunctionPointer<((UnsafePointer<Void>, UnsafePointer<Void>) -> Boolean)> var hash: CFunctionPointer<((UnsafePointer<Void>) -> CFHashCode)> var getPort: CFunctionPointer<((UnsafeMutablePointer<Void>) -> mach_port_t)> var perform: CFunctionPointer<((UnsafeMutablePointer<Void>, CFIndex, CFAllocator!, UnsafeMutablePointer<Void>) -> UnsafeMutablePointer<Void>)> }Objective C
struct CFRunLoopSourceContext1 { CFIndex version; void *info; CFAllocatorRetainCallBack retain; CFAllocatorReleaseCallBack release; CFAllocatorCopyDescriptionCallBack copyDescription; CFRunLoopEqualCallBack equal; CFRunLoopHashCallBack hash; CFRunLoopGetPortCallBack getPort; CFRunLoopMachPerformCallBack perform; }; typedef struct CFRunLoopSourceContext1 CFRunLoopSourceContext1;Поля
versionНомер версии структуры. Должен быть 1.
infoПроизвольный указатель на определенные с помощью программы данные, которые могут быть связаны с источником цикла выполнения во время создания. Этот указатель передается всем обратным вызовам, определенным в контексте.
retainСохранить обратный вызов для Вашего определенного с помощью программы
infoуказатель. Может бытьNULL.releaseОбратный вызов выпуска для Вашего определенного с помощью программы
infoуказатель. Может бытьNULL.copyDescriptionОбратный вызов описания копии для Вашего определенного с помощью программы
infoуказатель. Может бытьNULL.equalТестовый обратный вызов равенства для Вашего определенного с помощью программы
infoуказатель. Может бытьNULL.hashОбратный вызов вычисления хеша для Вашего определенного с помощью программы
infoуказатель. Может бытьNULL.getPortОбратный вызов для получения порта собственного компонента Маха, представленного источником. Когда источник или добавлен к или удален из режима цикла выполнения, этот обратный вызов вызывают.
performВыполнять обратный вызов для источника цикла выполнения. Когда источник стрелял, этот обратный вызов вызывают.
Доступность
Доступный в OS X v10.0 и позже.
-
Ссылка на исходный объект цикла выполнения.
Объявление
Swift
typealias CFRunLoopSourceRef = CFRunLoopSourceObjective C
typedef struct __CFRunLoopSource *CFRunLoopSourceRef;Оператор импорта
Objective C
@import CoreFoundation;Swift
import CoreFoundationДоступность
Доступный в OS X v10.0 и позже.
