Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: homa9999 от Май 10, 2006, 16:45



Название: зависание диалога при использование ф-ции system(path)
Отправлено: homa9999 от Май 10, 2006, 16:45
привет всем!у меня такая проблема.есть главный диалог, в котором все данные.потом я нажимаю на кнопку и запускается ф-ция,в которой я пишу:
...
system(PathFirst);
system(PathSecond);
...
PathFirst - это путь к дугой программе.Которая обрабатывает мои данные и выдает ответ виде файла,который я открываю в новом диалоге.Пишу прогу в Линуксе.
Проблема,когда запускаю ф-цию(тонее system в ф-ции).у меня главный диалог "замаражиается",зависает.процесс обработки может  идти долго.после обработки диалог возвращается к нормальной работе.как избавиться от зависания. расматривал QThread,но не очень понял и ничего не получилось.помогите please,если есть возможнось  .напишите код.спасибо.


Название: зависание диалога при использование ф-ции system(path)
Отправлено: chief от Май 10, 2006, 17:51
в этих случаях я использовал fork() для того чтоб создать дочерний процесс, exec() для выставления бинаря, и соответственно ловил sigchld. но тут с портированием могут проблемы возникнуть. ипользуя QThread мона эту проблему решить без всяких ifdef-ов.
фокус в том, что system после выполнения fork и exec уходит в waitpid соответственно верёвка вызвавшая system блокируется до того момента, гогда завершится дочерний процесс


Название: зависание диалога при использование ф-ции system(path)
Отправлено: homa9999 от Май 10, 2006, 20:28
Я понял тебя chief,но скажи у тебя нет примера с Qthread.Чтобы можно было разобратся?


Название: зависание диалога при использование ф-ции system(path)
Отправлено: alex0303 от Май 10, 2006, 20:52
А чем QProcess то не устраивает?
Он:
- и запускает в паралель (или параЛЛель?)
- и сигналит об окончании, и exitStatus() имеет
- и stdin/stdout/stderr порождённого процесса позволяет переопределять на себя, можно и без промежуточных файлов обойтись (при опредёлённых условиях).
- ну и кроссплатформенный к тому-же.


Название: зависание диалога при использование ф-ции system(path)
Отправлено: chief от Май 11, 2006, 09:23
Кстати да, ты абсолютно прав! QProcess, сдесь в самый раз. А нащёт кода по QThread, так в самлах что идут с этим самым Qt всё популярно изложено (см. examples/threads)


Название: зависание диалога при использование ф-ции system(path)
Отправлено: homa9999 от Май 11, 2006, 10:27
Спасибо,сегодня все посмотрю и попробую