मै मैक ओएस एक्स पर बस "सिग्नल" या किसी अन्य प्रक्रिया को सूचित करने के लिए सबसे सरल या सबसे उपयुक्त तरीका ढूंढ रहा हूं। विंडोज पृष्ठभूमि से आ रहा है यह निम्नलिखित की तरह कुछ का उपयोग करके हासिल किया जा सकता है।इंटरप्रोसेस संचार के लिए नामित ऑब्जेक्ट के साथ CreateEvent() के मैक ओएस एक्स समकक्ष?
प्रक्रिया एक में:
// create named event
hCreatedEvent = CreateEvent(NULL, TRUE, FALSE, "MyUniqueNamedEvent");
// wait for it to be signalled
WaitForSingleObject(hCreatedEvent, INFINITE);
और उसके बाद प्रक्रिया बी में:
// open the existing named event
hOpenedEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "MyUniqueNamedEvent");
// signal it
SetEvent(hOpenedEvent);
तो जब प्रक्रिया बी में SetEvent
कॉल निष्पादित, प्रक्रिया एक बाहर WaitForSingleObject
से तोड़ने के लिए और कुछ काम करना होगा ।
मुझे वास्तव में कोई डेटा भेजने की आवश्यकता नहीं है इसलिए मैंने नामित पाइप्स (फीफो) या सॉकेट इत्यादि जैसी चीजों को थोड़ा ओवरकिल के रूप में अस्वीकार कर दिया है (मैंने this similar question पर एक नज़र डाली है, लेकिन जैसा कि उन्हें चाहिए डेटा भेजने के लिए, मेरा प्रश्न थोड़ा अलग है)। समान रूप से, मुझे दूसरी प्रक्रिया के पीआईडी को नहीं पता होगा (यही कारण है कि मुझे किसी प्रकार की साझा वस्तु की आवश्यकता है) इसलिए मैं उस चीज का उपयोग नहीं कर सकता जिसके लिए इसकी आवश्यकता होगी।
तो मेरी शॉर्टलिस्ट पर दूर है:
- POSIX Semaphores -
sem_open
,sem_wait
औरsem_post
का उपयोग कर/खुला बनाने के लिए, पर प्रतीक्षा करें और क्रमशः घटना संकेत करने के लिए। उपयोग करने के लिए काफी straighforward दिखता है। - बीएसडी
notify(3)
फ़ंक्शंस - नोटिफिकेशन का उपभोग करने के लिए थोड़ा गुंजाइश नहीं है, तो उपयोग करने के लिए काफी सरल दिखाई देता है। NSDistributedNotificationCenter
याCFNotificationCenter
फ़ंक्शंस - चीजों को करने और काफी सरल करने के लिए "मैक जैसा" तरीका दिखाई देता है। हालांकि, मेरे कोड को एक डाइलिब के रूप में चलाने की आवश्यकता हो सकती है और this unanswered question के अनुसार, यह मेरे लिए काम नहीं कर सकता है।
तो, क्या किसी के पास उपरोक्त में से किसी भी का उपयोग करने वाली कोई सलाह/टिप्स/डरावनी कहानियां हैं, या यहां तक कि अधिक उपयुक्त विकल्प जिन्हें मैंने नहीं चाहते हैं, हासिल करने के बारे में नहीं सोचा है?