WaitForMultipleObjects терпит неудачу C++
В настоящее время я пишу программу, которая будет запускать несколько программ в группах одновременно и других самостоятельно.
if( WAIT_FAILED == WaitForMultipleObjects(numberOfProgramsRan, &information[i].hProcess, TRUE, INFINITE) ) {
wcerr << L"Failure waiting for process" << endl;
}
numberOfProgramsRan
количество программ, которые я запустил в цикле &information[i]
это vector
удерживая информацию о моем процессе из процесса создания
Когда я создаю процесс в цикле for, моя программа будет ждать, если будет создано два или менее процессов (таким образом, передаются две программы для запуска), прежде чем она запустит мои следующие процессы. Если создать более двух процессов (или передать более двух программ в моем векторе), мой WaitForMultipleObjects
это терпит неудачу.
Если мне нужно еще объяснить мою проблему, пожалуйста, дайте мне знать.
Спасибо за вашу помощь
3 ответа
Если вы ожидаете только одного процесса (индекс i), вам следует использовать WaitForSingleObject. Если вы ожидаете несколько процессов, вам нужно передать массив дескрипторов, как говорили другие, а не указатель на PROCESS_INFORMATION. Если вы настаиваете на использовании WaitFoRmultipleObjects для одного объекта, используйте:
WaitForMultipleObjects(1, &information[i].hProcess, TRUE, INFINITE)
Если вы используете что-то отличное от 1, посмотрите на определение PROCESS_INFORMATION:
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
Следующие dwProcessId и dwThreadID будут неправильно обрабатываться, так как дескрипторы вашего вызова не будут работать должным образом.
Что-то вроде:
HANDLE hProcess[MAX_PROCESSES];
for(int i=0; i<numberOfProgramsRan; i++)
{
hProcess[i] = information[i].hProcess;
}
WaitForMultipleObjects(numberOfProgramsRan, hProcess, TRUE, INFINITE);
Будем ждать на всех ваших процессах.
Тот &information[i].hProcess
должен быть указатель на первый элемент массива HANDLE
с, который содержит numberOfProgramsRan
элементы. По твоему описанию это не так, так что я не знаю, как ты себе это представляешь.
Убедитесь, что вы передаете указатель на массив РУЧКИ (см. Официальную документацию). Я не знаю что information[i].hProcess
но выглядит как один элемент HANDLE, содержащийся в структуре / классе. Хотя, если бы это была одна РУЧКА, я бы ожидал, что она будет работать только с 1 процессом, а не с 2, как вы упомянули.
Отображение определения information
и то, как вы инициализируете / создаете процессы здесь, может помочь, а также уменьшить код до минимального размера, который все еще воспроизводит проблему. Также может помочь информация о том, что это не удается (сообщение об ошибке / исключении, что происходит и т. Д.).