سؤال

ولقد خلق حدث في عملية واحدة واختبار، أرسل التعامل مع الحدث عبر الأنابيب إلى عملية منفصلة تماما (وليس موضوع الطفل)

عند I إطلاق الحدث في الأول، WaitForSingleObject لا يكشف هذا الحدث حتى أنا على التخمين الجواب ليس إلا فاتني بعض خدعة في في SECURITY_ATTRIBUTES هيكل؟

وأو ربما أنا بحاجة إلى استخدام حدث مسمى، وندعو OpenEvent ()؟

في هذه الحالة لا يمكنني استخدام الرسائل نافذة لأنني أحاول أن يشير إلى خدمة ويندوز. أنا يمكن استخدام الأنابيب، ولكن سيكون هناك العديد من هذه التطبيقات، وأود أن العثور على "منخفضة التكلفة" الحل إذا أمكن ذلك.

وخيارات أخرى مثل الذاكرة المعينة الملفات لها المزيد من النفقات العامة من الأنابيب؟

وكيف ستفعل ذلك؟

هل كانت مفيدة؟

المحلول

وتحتاج إلى إنشاء حدث مسمى وفتحه في كلتا العمليتين. إذا كان لديك عدة عمليات الاستماع، قد تفكر في استخدام الإشارة .

نصائح أخرى

ونعم يعمل هذا:

  #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

والأحداث

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top