2013-04-30 2 views
0

У меня есть приложение для какао, в котором я хотел бы использовать Сокеты домена UNIX для связи с общесистемным демоном.Вызов семейства CFRunLoop на приложение Cocoa

На первом этапе мой клиент подключится к демону, а затем прослушивает входящие записи журнала от демона.

Пример, который я нашел, CFLocalServer от компании Apple, использует CFSockets для обмена данными между двумя утилитами командной строки. Мне удалось установить часть кода демона красиво, потому что я могу решить, какую функцию вызывать у моего демона ([[NSRunLoop currentLoop] run] или CFRunLoopRun()). Однако у меня есть сомнения относительно клиента, который является какао-приложением.

В примере кода, клиент сначала создать их, связывает, добавляет их в качестве источника к текущей CFRunLoop для прослушивания операций, а затем вызывает CFRunLoopRun(); до отмены CFRunLoopStop(CFRunLoopGetCurrent());

Мой вопрос: могу сделать все что внутри блока в очереди последовательной отправки, созданной приложением-какао Objective-C, без вмешательства в NSRunLoop в основной поток моего приложения?

ответ

1

Да, вы можете это сделать, хотя вы можете просто подключить сокет к основному циклу запуска и позволить ему нормально работать (то есть не вызывать CFRunLoopRun() с момента его запуска).

Я также посмотрел бы на GCDAsyncSocket, который является очень приятной упаковкой для всего такого рода работ, если ваши потребности сложны. В настоящее время он не поддерживает сокеты домена unix, но вы можете использовать jdiehl's socketUN branch, который добавляет его.

+0

Благодарим вас за ответ. Как подключить сокет к основному циклу запуска в приложении какао? Предположим, я выполнил код в делетете приложения, когда приложение закончило запуск (так что я нахожусь в основном потоке). – 2013-05-01 13:24:49

+0

Как и сейчас, просто используйте 'CFRunLoopGetMain()'. Я предполагаю, что вы уже вызываете 'CFSocketCreateRunLoopSource()' и 'CFRunLoopAddSource()'. Просто добавьте его в основной цикл, а не в какой-нибудь другой цикл. –

+0

Спасибо, это сработало. – 2013-05-04 23:20:04

Смежные вопросы