У меня есть функция потока в процессе B, которая содержит переключатель для выполнения определенных операций на основе результатов события, отправленного из процесса A, они сохраняются как два элемента в массиве.Использование операторов выводов - C
Я установил первый элемент в событие, которое сигнализирует, когда процесс А имеет данные для отправки, и у меня есть второй элемент, установленный в событии, которое указывает, что процесс А закрыт.
Я начал реализовывать функции для оператора 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, Process B вместо этого отображает окно сообщения.
Если я оставляю первый случай незаполненным (ничего не делать), оба приложения закрываются так, как должны.
Далее процесс B передает данные об ошибке брошенные (Когда я закомментировать распаковку):
ли я реализовал свой коммутатор заявление неправильно? Я, правда, правильно справился с распаковкой HWND, какие-то предложения?
Спасибо за ваше время.
Edit:
Пример я следующее: создание Here
событий в Процессе 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);
}
}
Можете ли вы переформатировать код, чтобы удалить все посторонние пробелы и исправить (сделать согласованным) в зубчатость? На данный момент это трудно читать. – Vicky
Хорошо, изменил =] –
Ничего себе, удачи, поддерживая это. –