Como enviar sinal de evento através de processos - C

Eu tenho um aplicativo que consiste em duas janelas, uma se comunica com a outra e envia uma estrutura contendo dois números inteiros (nesse caso, dois lançamentos de dados).

Eu usarei eventos nas seguintes circunstâncias:

Processo a envia dados para o processo b, processo b exibe dadosO processo a fecha e, por sua vez, fecha o processo bO processo b fecha a, por sua vez, fecha o processo a

Percebi que, se o segundo processo estiver constantemente aguardando o primeiro processo enviar dados, o programa ficará parado, onde a ideia de implementar threads em cada processo ocorreu e eu já comecei a implementá-lo.

O problema que estou tendo é que não tenho muita experiência com threads e eventos, por isso não tenho certeza da melhor maneira de realmente implementar o que quero fazer.

Estou tentando descobrir como o outro processo saberá que o evento está sendo disparado para que ele possa executar as tarefas necessárias. Não entendo como um processo separado de outro pode dizer quais são os estados dos eventos. especialmente porque precisa agir assim que o evento mudar de estado.

Obrigado por qualquer ajuda

Editar:

Só posso usar os métodos Criar / Definir / Abrir para eventos, desculpe-me por não mencioná-lo anteriormente.

além disso, Crio um novo encadeamento no processo A que permite ao usuário interagir com o aplicativo enquanto escuta o evento close.

Criar tópico:

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 abertura em A quando B fechar:

    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;
            }
        }
    }

Criando evento em b (em 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);
            }

Configurando o evento para sinalizar quando B fechar:

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

Como você pode ver quando o evento é sinalizado, o aplicativo A está definido para fechar. Quando executo o aplicativo e fecho o processo B, o processo A não percebe o sinal alterado e não fecha.

Edição 2:

Depois de usar o GetLastError (); Consegui identificar que o identificador para o OpenEvent era NULL, o erro fornecido é

ERROR_FILE_NOT_FOUND - 2: O sistema não consegue encontrar o arquivo especificado

É o meu método de criar o evento e lê-lo incorretamente, certifique-se de incluir o prefixo Global \.

questionAnswers(2)

yourAnswerToTheQuestion