Estoy buscando la manera más simple o más apropiada en Mac OS X para simplemente "señalar" o notificar un proceso desde otro. Procedente de un fondo de Windows, esto podría lograrse usando algo como lo siguiente.Mac OS X equivalente de CreateEvent() con objeto nombrado para la comunicación entre procesos?
en el Procedimiento A:
// create named event
hCreatedEvent = CreateEvent(NULL, TRUE, FALSE, "MyUniqueNamedEvent");
// wait for it to be signalled
WaitForSingleObject(hCreatedEvent, INFINITE);
y luego en el Procedimiento B:
// open the existing named event
hOpenedEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "MyUniqueNamedEvent");
// signal it
SetEvent(hOpenedEvent);
Así que cuando se ejecuta la llamada SetEvent
en el Proceso B, Procedimiento A estallaría de WaitForSingleObject
y hacer algún trabajo .
No necesito enviar ningún dato, así que he descartado cosas como Canalizaciones con nombre (FIFO) o tomas de corriente, etc. por ser un poco exagerado (he echado un vistazo a this similar question, pero como necesitan para enviar datos, mi pregunta es un poco diferente). Igualmente, no sabré el PID del otro proceso (por lo que necesito algún tipo de objeto compartido), así que no puedo usar nada que lo requiera.
Hasta ahora en mi lista es:
- POSIX semáforos - usando
sem_open
, ysem_wait
sem_post
para crear/abierta, esperar en la señal y el evento respectivamente. Parece bastante sencillo de usar. - Las funciones de BSD
notify(3)
- parece bastante sencillo de usar, si no es un poco torpe para consumir notificaciones. - Las funciones
NSDistributedNotificationCenter
oCFNotificationCenter
- parece ser la manera más "similar a Mac" de hacer las cosas y bastante sencilla. Sin embargo, mi código puede necesitar ejecutarse como un dylib y de acuerdo con this unanswered question, eso puede no funcionar para mí.
Entonces, ¿alguien tiene algún consejo/sugerencia/historia de terror que haya utilizado alguna de las opciones anteriores, o incluso las más apropiadas que no he pensado para lograr lo que quiero?