Как говорит Реми, вы должны делать это с объектами синхронизации - вот для чего они.Предположим, что процесс A выполняется первым и хочет «передать» процесс B в какой-то момент.Затем он может сделать это:
SECURITY_ATTRIBUTES sa = { sizeof (SECURITY_ATTRIBUTES), NULL, TRUE };
HANDLE hHandOffToA = CreateEventW (&sa, TRUE, FALSE, L"HandOffToA");
HANDLE hHandOffToB = CreateEventW (&sa, TRUE, FALSE, L"HandOffToB");
// Start process B
CreateProcess (...);
while (!quit)
{
// Do work, and then:
SetEvent (hHandOffToB);
WaitForSingleObject (hHandOffToA, INFINITE);
}
CloseHandle (hHandOffToA);
CloseHandle (hHandOffToB);
И тогда процесс B может сделать:
HANDLE hHandOffToA = OpenEventW (EVENT_MODIFY_STATE, FALSE, L"HandoffToA");
HANDLE hHandOffToB = OpenEventW (SYNCHRONIZE, FALSE, L"HandoffToB");
while (!quit)
{
WaitForSingleObject (hHandOffToB, INFINITE);
// Do work, and then:
SetEvent (hHandOffToA);
}
CloseHandle (hHandOffToA);
CloseHandle (hHandOffToB);
Вы, конечно, должны включить надлежащую проверку ошибок, и я оставил это на ваше усмотрениерешить, как процесс A должен сказать процессу B завершить работу (я полагаю, он может просто его убить).Помните также, что имена событий являются общесистемными, поэтому выбирайте их более тщательно, чем я.