Влияет ли добавление источника в основной цикл выполнения на основные операции приложения? - PullRequest
1 голос
/ 25 января 2012

Я использую CFMessagePort для межпроцессного взаимодействия в приложении на основе AppKit и добавляю CFMessagePort источник в текущий цикл выполнения.

CFMessagePortRef local = CFMessagePortCreateLocal( kCFAllocatorDefault, daemonHostName,didReceiveDataFromOtherProcess, NULL,false);
if (local) {
    CFRunLoopSourceRef source = CFMessagePortCreateRunLoopSource(NULL, local, 0);
    CFRunLoopRef rl = [[NSRunLoop mainRunLoop] getCFRunLoop];
    CFRunLoopAddSource(rl, source, kCFRunLoopDefaultMode);
}  
  1. Это правильный подход?
  2. Должен ли я запустить runloop, используя CFRunLoopRun()?
  3. Это повлияет на основные операции моего приложения (если клиент отправлять сообщения каждую секунду)?

1 Ответ

2 голосов
/ 01 февраля 2012
  1. Я не вижу в этом ничего плохого.

  2. Я понял из вашего комментария, что вы используете основной цикл выполнения, который запускается автоматически, поэтому ответ Нет. Если вы не создали цикл выполнения, вам определенно не нужно запускать это.

  3. Один раз в секунду это совсем не проблема. Однако, если обратный вызов didReceiveDataFromOtherProcess() занимает значительное время, ваш интерфейс будет менее отзывчивым. В этом случае поможет создание вторичного потока с собственным циклом выполнения. Если вы не уверены, не беспокойтесь об этой проблеме, пока она не возникнет.

P.S. Вы должны освободить источник после его добавления, потому что он был сохранен циклом выполнения.

...