Question

J'ai créé un événement dans un processus et pour le tester, j'ai envoyé le descripteur d'événement via un canal à un processus totalement séparé (pas un thread enfant)

Lorsque je déclenche l'événement dans le premier, WaitForSingleObject ne détecte pas l'événement, donc je suppose que la réponse est non, sauf si j'ai manqué une astuce dans Structure SECURITY_ATTRIBUTES?

Ou peut-être dois-je utiliser un événement nommé et appeler OpenEvent ()?

Dans ce cas, je ne peux pas utiliser les messages Windows car j'essaie de signaler un service Windows. Je pourrais utiliser le tuyau, mais il y aura beaucoup de ces applications, et je voudrais trouver un "faible coût" solution si possible.

D'autres options, telles que les fichiers mappés en mémoire, sont encore plus lourdes que le tube?

Comment feriez-vous cela?

Était-ce utile?

La solution

Vous devez créer un événement nommé et l'ouvrir dans les deux processus. Si vous avez plusieurs processus d'écoute, vous pouvez envisager d'utiliser un semaphore. .

Autres conseils

Oui cela fonctionne:

  #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

En général, qu'est-ce qui a le moins de frais généraux:

Tuyaux (en supposant que la petite taille soit spécifiée)

MemMapFiles

Événements

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top