Название: зависание диалога при использование ф-ции 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 Спасибо,сегодня все посмотрю и попробую
|