Russian Qt Forum

Qt => Общие вопросы => Тема начата: Garik от Апрель 28, 2006, 11:09



Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: Garik от Апрель 28, 2006, 11:09
Мне необходимо дождаться завершения работы одной проги, как мне отследить что ее процесс завершен?


Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: Grigory от Апрель 28, 2006, 14:55
а прогу ты сам запускаешь?


Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: Garik от Апрель 28, 2006, 15:51
Существует одна программа, которая запускает с помощью QProcess вторую и закрывается. А вторая прога должна дождаться закрытия первой и только потом начать работать.


Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: Sergeich от Май 02, 2006, 15:17
void QProcess::processExited () [signal]

добавлено спустя 6 минут:

 Пардон, сразу не разобрался что к чему. Номер с QProcess'ом не пройдет :(
Можно в первую прогу впаять серверный сокет, а во второй законнектиться к первой. Когда соединение разорвется, можно начинать работу.


Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: Garik от Май 02, 2006, 17:31
Спасибо, попробую


Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: pastor от Май 02, 2006, 20:55
Можешь попробывать так:

Код:
bool applicationIsRunning()
{
bool ret = false;

QString name( "first.exe" );
     
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if ( hProcessSnap == INVALID_HANDLE_VALUE )
        return false;
 
    PROCESSENTRY32 pe32 = { 0 };
pe32.dwSize = sizeof(PROCESSENTRY32);

if ( ::Process32First( hProcessSnap, &pe32 ) ) {
do {
if ( QString( pe32.szExeFile ).upper() == name.upper() ) {
ret = true;
break;
}
}
while (::Process32Next( hProcessSnap, &pe32 ) );
}
     
::CloseHandle( hProcessSnap );
   
return ret;
}


где first.exe это имя твоего первого приложения.

Данную функия возвращает true - если процесс активен, false - в противном случае.

Данный кусок вставишь во второе приложение.


Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: Sergeich от Май 02, 2006, 23:50
Ёханный!!! Давай сюда еще кусок кода для линуха и мака, и сообчество будет радо :)

добавлено спустя 3 минуты:

 А как получить сигнал о завершении процесса? Проверять все процессы по таймеру?


Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: alex0303 от Май 03, 2006, 01:06
Цитата: "Garik"
Существует одна программа, которая запускает с помощью QProcess вторую и закрывается. А вторая прога должна дождаться закрытия первой и только потом начать работать.


А зачем всё это?
Или вторая прога всё же сначала что-то полезное делает, а уж потом ожидает завершения родителя.
Иначе вполне можно запускать вторую прогу непосредственно перед выходом из первой.


Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: Steven_Orko от Май 03, 2006, 20:42
Вообще, насколько я знаю, в системе можно поставить глобальный именованный мютекс. Первая прога его блокирует, а потом, когда завершается, в момент возврата значения из main, освобождает. А вторая пытается заблокировать данный мютекс, обращаясь к нему по имени. Если последний заблокирован, то прога первая работает и нужно подождать, если свободен, значит, можно дальше работать. Код не приведу, т.к. на память пишу. Поройся в мануалах, найдешь 100%. Это лучший способ из всех, что здесь предлгали. Да, кстати, QSingleApplication, кажись, по тому же принципу работает. Посмотри его исходники.


Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: pastor от Май 04, 2006, 13:00
2 Steven_Orko
    Да, ты прав, кросовости с моём коде и близко нет  :) , но тем не менее... пример рабочий. Отлавить завершение процесса можно как по таймеру, так и в цикле со слипом. Кому что ближе к телу  :wink:
   Насчёт именованых мютексов, то врядли здесь кути поможет, нет в ней такой возможности (покрайней мере я не нашёл). ИМХО, прийдётся это реализовывать средствами ОС. А сама идея стоющая!

 2 Garik
   Если тебя заинтересовало решение твоей проблемы через мютексы, могу выложить пример под винду.


Название: Как в Qt 3.3.5 узнать работает прога или нет
Отправлено: Steven_Orko от Май 04, 2006, 19:00
to pastor
Начет Qt ты прав. Там нет такой возможности. Но я точно знаю, что в Винде и Линукс есть. Если нужна кроссплатформенность, хотя зачем? )))то придется два файла таксать с классом.
Ну, а так, чисто для Винды - мютексы только в путь... )))