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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: зависание диалога при использование ф-ции system(path)  (Прочитано 4333 раз)
homa9999
Гость
« : Май 10, 2006, 16:45 »

привет всем!у меня такая проблема.есть главный диалог, в котором все данные.потом я нажимаю на кнопку и запускается ф-ция,в которой я пишу:
...
system(PathFirst);
system(PathSecond);
...
PathFirst - это путь к дугой программе.Которая обрабатывает мои данные и выдает ответ виде файла,который я открываю в новом диалоге.Пишу прогу в Линуксе.
Проблема,когда запускаю ф-цию(тонее system в ф-ции).у меня главный диалог "замаражиается",зависает.процесс обработки может  идти долго.после обработки диалог возвращается к нормальной работе.как избавиться от зависания. расматривал QThread,но не очень понял и ничего не получилось.помогите please,если есть возможнось  .напишите код.спасибо.
Записан
chief
Гость
« Ответ #1 : Май 10, 2006, 17:51 »

в этих случаях я использовал fork() для того чтоб создать дочерний процесс, exec() для выставления бинаря, и соответственно ловил sigchld. но тут с портированием могут проблемы возникнуть. ипользуя QThread мона эту проблему решить без всяких ifdef-ов.
фокус в том, что system после выполнения fork и exec уходит в waitpid соответственно верёвка вызвавшая system блокируется до того момента, гогда завершится дочерний процесс
Записан
homa9999
Гость
« Ответ #2 : Май 10, 2006, 20:28 »

Я понял тебя chief,но скажи у тебя нет примера с Qthread.Чтобы можно было разобратся?
Записан
alex0303
Гость
« Ответ #3 : Май 10, 2006, 20:52 »

А чем QProcess то не устраивает?
Он:
- и запускает в паралель (или параЛЛель?)
- и сигналит об окончании, и exitStatus() имеет
- и stdin/stdout/stderr порождённого процесса позволяет переопределять на себя, можно и без промежуточных файлов обойтись (при опредёлённых условиях).
- ну и кроссплатформенный к тому-же.
Записан
chief
Гость
« Ответ #4 : Май 11, 2006, 09:23 »

Кстати да, ты абсолютно прав! QProcess, сдесь в самый раз. А нащёт кода по QThread, так в самлах что идут с этим самым Qt всё популярно изложено (см. examples/threads)
Записан
homa9999
Гость
« Ответ #5 : Май 11, 2006, 10:27 »

Спасибо,сегодня все посмотрю и попробую
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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