Russian Qt Forum
Ноябрь 24, 2024, 00:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в Qt 3.3.5 узнать работает прога или нет  (Прочитано 6986 раз)
Garik
Гость
« : Апрель 28, 2006, 11:09 »

Мне необходимо дождаться завершения работы одной проги, как мне отследить что ее процесс завершен?
Записан
Grigory
Гость
« Ответ #1 : Апрель 28, 2006, 14:55 »

а прогу ты сам запускаешь?
Записан
Garik
Гость
« Ответ #2 : Апрель 28, 2006, 15:51 »

Существует одна программа, которая запускает с помощью QProcess вторую и закрывается. А вторая прога должна дождаться закрытия первой и только потом начать работать.
Записан
Sergeich
Гость
« Ответ #3 : Май 02, 2006, 15:17 »

void QProcess::processExited () [signal]

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

 Пардон, сразу не разобрался что к чему. Номер с QProcess'ом не пройдет Грустный
Можно в первую прогу впаять серверный сокет, а во второй законнектиться к первой. Когда соединение разорвется, можно начинать работу.
Записан
Garik
Гость
« Ответ #4 : Май 02, 2006, 17:31 »

Спасибо, попробую
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Май 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 - в противном случае.

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Sergeich
Гость
« Ответ #6 : Май 02, 2006, 23:50 »

Ёханный!!! Давай сюда еще кусок кода для линуха и мака, и сообчество будет радо Улыбающийся

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

 А как получить сигнал о завершении процесса? Проверять все процессы по таймеру?
Записан
alex0303
Гость
« Ответ #7 : Май 03, 2006, 01:06 »

Цитата: "Garik"
Существует одна программа, которая запускает с помощью QProcess вторую и закрывается. А вторая прога должна дождаться закрытия первой и только потом начать работать.


А зачем всё это?
Или вторая прога всё же сначала что-то полезное делает, а уж потом ожидает завершения родителя.
Иначе вполне можно запускать вторую прогу непосредственно перед выходом из первой.
Записан
Steven_Orko
Гость
« Ответ #8 : Май 03, 2006, 20:42 »

Вообще, насколько я знаю, в системе можно поставить глобальный именованный мютекс. Первая прога его блокирует, а потом, когда завершается, в момент возврата значения из main, освобождает. А вторая пытается заблокировать данный мютекс, обращаясь к нему по имени. Если последний заблокирован, то прога первая работает и нужно подождать, если свободен, значит, можно дальше работать. Код не приведу, т.к. на память пишу. Поройся в мануалах, найдешь 100%. Это лучший способ из всех, что здесь предлгали. Да, кстати, QSingleApplication, кажись, по тому же принципу работает. Посмотри его исходники.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Май 04, 2006, 13:00 »

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

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Steven_Orko
Гость
« Ответ #10 : Май 04, 2006, 19:00 »

to pastor
Начет Qt ты прав. Там нет такой возможности. Но я точно знаю, что в Винде и Линукс есть. Если нужна кроссплатформенность, хотя зачем? )))то придется два файла таксать с классом.
Ну, а так, чисто для Винды - мютексы только в путь... )))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 23.