короче говоря, проблема в следующем — пишу программу которая создаёт цепочку из процессов.
То есть её задача такова — указываем первый процесс, второй процесс, и тд, потом жмем кнопку запустить — запускается первый процесс. Программа должна отслеживать, когда этот процесс закончит работу, и запускать следующий процесс.
На данном этапе это реализовано через GetExitCodeProcess таким образом:
вот тут-то и порылась собака — во время работы первого процесса моя прога подвисает наглухо из-за цикла.
а как можно сделать, чтобы моя программа ждала события от первого процесса, переходила в режим wait? Мне посоветовали использовать для этих целей mutex, но я с ним разобраться пока не могу.
Здравствуйте, ashot, Вы писали:
A>вот тут-то и порылась собака — во время работы первого процесса моя прога подвисает наглухо из-за цикла. A>а как можно сделать, чтобы моя программа ждала события от первого процесса, переходила в режим wait? Мне посоветовали использовать для этих целей mutex, но я с ним разобраться пока не могу.
вот пример из MSDN
void main( VOID )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// Start the child process. if( !CreateProcess( NULL, // No module name (use command line). "MyChildProcess", // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
ErrorExit( "CreateProcess failed." );
}
// Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE );// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
A>CreateProcess(NULL, strCurrentName1, NULL,NULL,TRUE,0,NULL,NULL,&si,&pi); A>DWORD q; A>GetExitCodeProcess(pi.hProcess,&q); A>while (q==STILL_ACTIVE) A> GetExitCodeProcess(pi.hProcess,&q); A>CreateProcess(NULL, strCurrentName2, NULL,NULL,TRUE,0,NULL,NULL,&si,&pi);
A>вот тут-то и порылась собака — во время работы первого процесса моя прога подвисает наглухо из-за цикла. A>а как можно сделать, чтобы моя программа ждала события от первого процесса, переходила в режим wait? Мне посоветовали использовать для этих целей mutex, но я с ним разобраться пока не могу.
1. Если очень хочется использовать такой цикл, вставь что-нить типа Sleep(10); — нагрузка на процессор упадет.
2. Handle процесса является wait-объектом. Т.е. можешь использовать так
3. По поводу mutex-ов. В своем приложении создаешь mutex (хотя лучше event). У него можно задать имя, а по этому имени — открыть в другом процессе (OpenMutex, OpenEvent). Т.е. твои дочерние процессы открывают этот mutex (или event) по имени, и по окончании работы "сигналят" им.