Я ищу самый простой или наиболее подходящий способ для Mac OS X, чтобы просто «сигнализировать» или уведомлять один процесс от другого. Исходя из фона Windows, это может быть достигнуто с помощью чего-то вроде следующего.
В процессе A:
// create named event
hCreatedEvent = CreateEvent(NULL, TRUE, FALSE, "MyUniqueNamedEvent");
// wait for it to be signalled
WaitForSingleObject(hCreatedEvent, INFINITE);
и затем в процессе B:
// open the existing named event
hOpenedEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "MyUniqueNamedEvent");
// signal it
SetEvent(hOpenedEvent);
Таким образом, при выполнении вызова SetEvent
в процессе B процесс A выйдет из WaitForSingleObject
и выполнит некоторую работу.
Мне на самом деле не нужно отправлять какие-либо данные, поэтому я исключил такие вещи, как именованные каналы (FIFO) или сокеты и т. Д., Поскольку это немного излишне (я посмотрел на этот похожий вопрос , но так как им нужно отправить данные, у меня вопрос немного другой). Точно так же я не буду знать PID другого процесса (вот почему мне нужен какой-то общий объект), поэтому я не могу использовать ничего, что потребовало бы этого.
Пока в моем списке:
- Семафоры POSIX - использование
sem_open
, sem_wait
и sem_post
для создания / открытия, ожидания и передачи события соответственно. Кажется довольно простым в использовании.
- Функции BSD
notify(3)
- кажется довольно простым в использовании, если не немного неуклюжим для использования уведомлений.
- Функции
NSDistributedNotificationCenter
или CFNotificationCenter
- кажутся наиболее «похожими на Mac» способами и довольно простыми. Однако мой код может работать как dylib, и в соответствии с этот вопрос без ответа может не сработать.
Итак, есть ли у кого-нибудь какие-либо советы / советы / ужасные истории, использовавшие какой-либо из вышеперечисленных, или даже более подходящих альтернатив, о которых я не думал, чтобы достичь того, чего я хочу? *