У меня есть функция потока в процессе B, которая содержит переключатель для выполнения определенных операций на основе результатов события, отправленного из процесса A, они хранятся как два элемента в массиве.
Я установил первый элемент на событие, которое сигнализирует, когда у Процесса А есть данные для отправки, а второй элемент настроен на событие, которое указывает, когда Процесс А. закрылся.
Я начал реализовывать функциональность оператора switch, но я не получаю ожидаемых результатов.
Обратите внимание на следующее:
//Thread function
DWORD WINAPI ThreadFunc(LPVOID passedHandle)
{
for(i = 0; i < 2; i++)
{
ghEvents[i] = OpenEvent(EVENT_ALL_ACCESS, FALSE, TEXT("Global\\ProducerEvents"));
if(ghEvents[i] == NULL)
{
getlasterror = GetLastError();
}
}
dwProducerEventResult = WaitForMultipleObjects(
2,
ghEvents,
FALSE,
INFINITE);
switch (dwProducerEventResult)
{
case WAIT_OBJECT_0 + 0:
{
//Producer sent data
//unpackedHandle = *((HWND*)passedHandle);
MessageBox(NULL,L"Test",L"Test",MB_OK);
break;
}
case WAIT_OBJECT_0 + 1:
{
//Producer closed
ExitProcess(1);
break;
}
default:
return;
}
}
Как вы видите, если событие в первом массиве сигнализируется, процесс B должен отображать простое окно сообщения, если сигнализируется второй массив, приложение должно закрываться.
Когда я фактически закрываю процесс A, процесс B отображает окно сообщения.
Если я оставлю первый случай пустым (Ничего не делать), оба приложения закроются, как и должно.
Кроме того, процесс B отправляет данные об ошибке (когда я закомментирую распаковку):
Не правильно ли я реализовал оператор switch? Я хоть и правильно распаковал HWND, есть предложения?
Спасибо за ваше время.
Edit:
Пример, которым я следую: Здесь
Создание события в процессе A:
for (i = 0; i < 2; i++)
{
ghEvents[i] = CreateEvent(
NULL, // default security attributes
TRUE, // auto-reset event object
FALSE, // initial state is nonsignaled
TEXT("Global\\ProducerEvents")); // unnamed object
if (ghEvents[i] == NULL)
{
printf("CreateEvent error: %d\n", GetLastError() );
ExitProcess(0);
}
}