문제

한 프로세스로 이벤트를 만들고 테스트하고 파이프를 통해 이벤트 핸들을 완전히 별도의 프로세스로 보냈습니다 (아동 스레드가 아님)

첫 번째 이벤트를 시작하면 WaitforsingleObject는 이벤트를 감지하지 않으므로 Security_attributes 구조?

아니면 명명 된 이벤트를 사용하고 Openevent () 호출해야합니까?

이 경우 Windows 서비스에 신호를 보내려고하므로 창 메시지를 사용할 수 없습니다. 파이프를 사용할 수는 있지만 이러한 응용 프로그램이 많이있을 것이며 가능한 경우 "저렴한 비용"솔루션을 찾고 싶습니다.

메모리 매핑 파일과 같은 다른 옵션은 파이프보다 더 많은 오버 헤드를 가지고 있습니까?

어떻게 하시겠습니까?

도움이 되었습니까?

해결책

명명 된 이벤트를 만들고 두 프로세스 모두에서 열어야합니다. 여러 프로세스가 듣고있는 경우 사용을 고려할 수 있습니다. 신호기.

다른 팁

예이 효과가 있습니다 :

  #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