我正在尋找最簡單或最恰當的方式在Mac OS X上簡單地「發信號」或通知另一個進程。從Windows背景來看,這可以通過使用類似下面的內容來實現。Mac OS X的等效CreateEvent()與進程間通信的命名對象?
在方法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);
那麼則執行方法B SetEvent
呼叫時,進程A會從WaitForSingleObject
爆發並做了一些工作。
我不需要實際發送任何數據,所以我排除了像命名管道(FIFO)或套接字等事情,因爲有點矯枉過正(我看過this similar question,但因爲他們需要發送數據,我的問題略有不同)。同樣,我不會知道另一個進程的PID(這就是爲什麼我需要某種共享對象),所以我不能使用任何需要的東西。
到目前爲止,在我的名單是:
- POSIX信號燈 - 使用
sem_open
,sem_wait
和sem_post
創建/打開,等待和信號分別事件。顯得相當直接使用。 - BSD
notify(3)
函數 - 看起來相當簡單易用,即使不是一點點笨重的使用通知。 NSDistributedNotificationCenter
或CFNotificationCenter
函數 - 看起來是最「Mac like」的做事方式,相當簡單。然而,我的代碼可能需要作爲dylib運行,並根據this unanswered question,這可能不適合我。
那麼,有沒有人有任何建議/提示/恐怖故事使用上述任何一種,或甚至更合適的替代品,我沒有想到要實現我想要的?