2009-03-09 17 views
6

मैं एक प्रक्रिया में एक ईवेंट बनाया है और परीक्षण करने के लिए, एक पूरी तरह से अलग प्रक्रिया (नहीं एक बच्चे धागा)घटनाएं इंटर-प्रोसेस हो सकती हैं?

जब मैं पहली बार में किसी ईवेंट को सक्रिय, WaitForSingleObject पता नहीं लगा पाया करने के लिए एक पाइप के माध्यम से घटना संभाल भेजा घटना इसलिए मैं अनुमान लगा रहा हूं कि जवाब SECURITY_ATTRIBUTES structure?

या शायद मुझे एक नामित ईवेंट का उपयोग करने और OpenEvent() को कॉल करने की आवश्यकता है?

इस मामले मैं क्योंकि मैं एक खिड़कियों सेवा संकेत करने के लिए कोशिश कर रहा हूँ खिड़की संदेशों उपयोग नहीं कर सकते में

। मैं पाइप का उपयोग कर सकता था, लेकिन इनमें से कई एप्लिकेशन होंगे, और यदि संभव हो तो मैं "कम लागत" समाधान ढूंढना चाहता हूं।

मेमोरी मैप की गई फ़ाइलों जैसे अन्य विकल्प पाइप की तुलना में और अधिक ओवरहेड हैं?

आप यह कैसे करेंगे?

उत्तर

3

आपको एक नामित ईवेंट बनाने और इसे दोनों प्रक्रियाओं में खोलने की आवश्यकता है। यदि आपके पास कई प्रक्रियाएं सुन रही हैं, तो आप semaphore का उपयोग करने पर विचार कर सकते हैं।

+0

हैं (छोटे आकार निर्दिष्ट कल्पना करते हुए) नामित घटनाओं का उपयोग विभिन्न उपयोगकर्ता खातों या सत्रों द्वारा किया जाता है, प्रदान करने के लिए आवश्यक हो सकता है सृजन पर एक स्पष्ट एसीएल। – Richard

+0

क्या आपके पास इसका एक उदाहरण है? स्मृति या प्रसंस्करण के समय –

0

हाँ यह काम करता है:

#COMPILE EXE "NamedEvent.exe" 

    #INCLUDE "win32api.inc" 

    %EVENT_ALL_ACCESS = &h0001F0003 

    FUNCTION PBMAIN() AS LONG 

    LOCAL lRet AS LONG, lError AS LONG, lEventName AS ASCIIZ * %MAX_PATH 
    lEventName = "TestEvent" 
    lRet = CreateEvent (BYVAL %NULL, %False, %False, lEventName) 
    lError = GetLastError() 
    IF ISFALSE lRet THEN 
     MSGBOX "Unable to create Event, error:" + STR$(lError),,"CreateEvent error" 
    ELSE 
     IF lError = %ERROR_ALREADY_EXISTS THEN 
     lRet = OpenEvent(BYVAL %EVENT_ALL_ACCESS, %False, lEventName) 
     lError = GetLastError() 
     IF lRet THEN 
      MSGBOX "Opened existing Event, handle:" + STR$(lRet),,"OpenEvent:" 
     ELSE 
      MSGBOX "Unable to open Event, error:" + STR$(lError),,"OpenEvent error" : EXIT FUNCTION 
     END IF 
     ELSE 
     MSGBOX "Created new Event, handle:" + STR$(lRet),,"CreateEvent:" 
     END IF 
    END IF  

    END FUNCTION 

सामान्य तौर पर, क्या एक कम भूमि के ऊपर है:

पाइप्स

MemMapFiles

घटनाक्रम

+0

ओवरहेड? –

+0

मैं इन दोनों संसाधनों पर प्रभाव को समझना चाहता हूं। –

संबंधित मुद्दे