프로세스 A에서 보낸 이벤트 결과를 기반으로 특정 작업을 수행하는 스위치가 포함 된 프로세스 B의 스레드 기능이 어레이에 두 요소로 저장되어 있습니다.스위치 명령문 사용 - C
프로세스 A가 보낼 데이터가있을 때 신호를 보내는 이벤트에 첫 번째 요소를 설정하고 프로세스 A가 닫힌 시점을 나타내는 이벤트를 두 번째 요소로 설정했습니다.
switch 문에 대한 기능을 구현하기 시작했지만 예상대로 결과를 얻지 못했습니다. 첫 번째 배열의 이벤트가 두 번째 배열 신호를하면 프로세스 B는 간단한 메시지 상자를 표시해야 신호를하면 당신이 볼 수 있듯이
//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;
}
}
응용 프로그램을 종료해야합니다
는 다음과 같은 고려하십시오.
실제로 프로세스 A를 닫으면 프로세스 B가 대신 메시지 상자를 표시합니다.
첫 번째 사례를 공백으로두면 (아무 것도하지 않음) 두 응용 프로그램이 모두 닫힙니다.
내가 잘못 내 switch 문을 구현 한 :
는 또한 프로세스 B는 오류가 (언제 포장을 해체 주석) 슬로우됩니다 데이터를 전송? 나는 HWND의 포장을 올바르게 처리 했음에도 불구하고 어떤 제안을 했는가?
감사합니다.
편집 :
예 내가 다음 해요 : 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
좋아요, 변경 =] –
와우, 행운을 비고 있습니다. –