Cómo enviar señal de evento a través de procesos - C

Tengo una aplicación que consta de dos ventanas, una se comunica con la otra y le envía una estructura que consta de dos enteros (en este caso, dos tiradas de dados).

Usaré eventos para las siguientes circunstancias:

El proceso a envía datos al proceso b, el proceso b muestra datosProceso a cierra, a su vez proceso de cierre bEl proceso b cierra a, a su vez el proceso de cierre a

Me di cuenta de que si el segundo proceso está constantemente esperando que el primer proceso envíe datos, entonces el programa se quedará esperando, que es donde surgió la idea de implementar hilos en cada proceso y ya he comenzado a implementar esto.

El problema que tengo es que no tengo mucha experiencia con subprocesos y eventos, por lo que no estoy seguro de la mejor manera de implementar lo que quiero hacer.

Estoy tratando de averiguar cómo el otro proceso sabrá del evento que se está disparando para que pueda hacer las tareas que necesita hacer, no entiendo cómo un proceso que está separado de otro puede decir cuáles son los estados de los eventos. especialmente porque necesita actuar tan pronto como el evento haya cambiado de estado.

Gracias por cualquier ayuda

Editar:

Solo puedo usar los métodos Crear / Establecer / Abrir para eventos, perdón por no mencionarlo antes.

además, Creo un nuevo hilo en el proceso A que permite al usuario interactuar con la aplicación mientras escucha el evento cercano.

Crear hilo:

hCreateEventThread = CreateThread(
                NULL,       // lpThreadAttributes (default)
                0,          // dwStackSize (default)
                ThreadFunc, // lpStartAddress
                NULL,       // lpParameter
                0,          // dwCreationFlags
                &hCreateEventThreadID   // lpThreadId (returned by function)
                );

            if(hCreateEventThread != NULL)
            {
                MessageBox(hMainWindow,L"Thread created!",L"Success!",MB_OK);
            }

Evento de apertura en A cuando B cierra:

    DWORD WINAPI ThreadFunc(LPVOID passedHandle)
    {
        hConsumerCloseEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, TEXT("Global\\ConsumerCloseEvent"));

        while(TRUE)
        {
            dwCloseResult = WaitForSingleObject(hConsumerCloseEvent,INFINITE);

            switch (dwCloseResult) 
            {
                // State of object is signalled
            case WAIT_OBJECT_0: 
                //Consumer has closed, exit program.
                //CloseHandle(hDiceRoll);
                //CloseHandle(hCloseEvent);
                //CloseHandle(hCreateEventThread);
                ExitProcess(1);
                break;
            default: 
                return;
            }
        }
    }

Creando evento en b (en WM_CREATE):

hConsumerCloseEvent = CreateEvent( 
                NULL,               // default security attributes
                TRUE,               // manual-reset event
                TRUE,              // initial state is nonsignaled
                TEXT("Global\\ConsumerCloseEvent")  // object name
                );

            if(hConsumerCloseEvent == NULL)
            {
                MessageBox(hMainWindow,L"CreateEvent failed",L"Error",MB_OK);
            }

Configurar el evento para que se señale cuando B se cierre:

case WM_DESTROY:
        {
            SetEvent(hConsumerCloseEvent);
            PostQuitMessage(0);
            break;
        }

Como puede ver cuando se señala el evento, la aplicación A está configurada para cerrarse. Cuando ejecuto la aplicación y cierro el proceso B, el proceso A no nota la señal cambiada y no se cierra.

Edición 2:

Después de usar GetLastError (); Pude identificar que el identificador de OpenEvent era NULL, el error dado es

ERROR_FILE_NOT_FOUND - 2: el sistema no puede encontrar el archivo especificado

Es mi método de crear el evento y leerlo incorrecto, me he asegurado de incluir el prefijo Global \.

Respuestas a la pregunta(2)

Su respuesta a la pregunta