يمكن أن تكون الأحداث المشتركة بين عملية؟
سؤال
ولقد خلق حدث في عملية واحدة واختبار، أرسل التعامل مع الحدث عبر الأنابيب إلى عملية منفصلة تماما (وليس موضوع الطفل)
عند 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
والأحداث