@lixaka

Windiws -Как создать 2 процесса, в которых один активизирует события, а другой распознает их?

Создаются два процесса. Процесс A в случайном порядке, с интервалом 1 с активизирует одно из двух событий. Процесс B распознает эти события и отображает их на экране как буквы X или Y. Когда количество выданных букв достигает 100, процесс B сообщает A, что пора завершать работу.
Код, который по моей логики:
Процесс А
#include "stdafx.h"
#include
int main(int argc, char* argv[])
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
HANDLE hEvent1 = CreateEvent(NULL,FALSE,FALSE,NULL);
HANDLE hEvent2 = CreateEvent(NULL,FALSE,FALSE,NULL);
HANDLE hEvent3 = CreateEvent(NULL,FALSE,FALSE,NULL);

ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
if (!CreateProcess(L"C:\\Users\Documents\Visual Studio 2010\Projects\B\Debug\B.exe", NULL, NULL, NULL, FALSE,
CREATE_NEW_CONSOLE, NULL, NULL, &si, π))

// закрываем дескрипторы этого процесса
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
int n=0;
while (n<=100)
{
DWORD WaitForSingleEvent (HANDLE, DWORD dwMilliseconds);
BOOL SetEvent((hEvent1)||(hEvent2));
WaitForSingleObject(hEvent3, 0);
DWORD dwWaitResult = WaitForSingleObject(hEvent3, INFINITE);
if (dwWaitResult != WAIT_OBJECT_0)
{
return 0;
}
n++;
}
}

Процесс B

#include "stdafx.h"
#include
#include
int main(int argc, char* argv[])
{
HANDLE hEvent1 = OpenEvent(NULL,FALSE,NULL);
HANDLE hEvent2 = OpenEvent(NULL,FALSE,NULL);
HANDLE hEvent3 = OpenEvent(NULL,FALSE,NULL);
int k=0;
while (k<100)
{

WaitForSingleObject( hEvent1, INFINITE);
WaitForSingleObject( hEvent2, INFINITE);
if (hEvent1!=NULL)
{
std::cout<<"X";
}

if (hEvent2!=NULL)
{
std::cout<<"Y";
}
k++;

}
if (k=100)
{
SetEvent(hEvent3);
return 1;
}
}

Только начинаю разбирать эту тему,но не могу даже проверить правильно ли это работает. Вроде по логике запускаю сигнал - жду - распознаю-подаю другому процессу, может кто может помочь с этим вопросом?Как правильно и граммотно это написать и в правильном ли направлении иду,может что-то исправить необходимо
  • Вопрос задан
  • 2381 просмотр
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега Windows
Любые ответы на любые вопросы
Направление правильное, но реализация хромает.
Нужно создавать именованные события (последний параметр у CreateEvent).
Ждать одно из многих событий можно при помощи WaitForMultipleObjects - она возвращает WAIT_OBJECT_0+номер первого выставленного события.
Дерзайте.
Ответ написан
Комментировать
@lixaka Автор вопроса
Спасибо большое!Можно еще задать такой вопрос,вот "Процесс A в случайном порядке, с интервалом 1 с активизирует одно из двух событий. " можно ли это реализовать строчкой
BOOL SetEvent((hEvent1)||(hEvent2));
?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы