LINUX.ORG.RU

[qt] отделение процесса

 


0

0

Хочу такую штуку: есть у меня программа, в ней я выбираю какие-нибудь параметры. При том хочу, чтобы когда я нажму на кнопку Start (внимание!) от этой программы отделился как отдельный процесс какой-нибудь core-process, который из основной части мог бы получить только аргументы. И чтобы в случае его завершения всё не валилось, чтобы можно было отловить что-то типа core-process.error() и core-process.executed(). Куда мне копать? Если можно, приведите пример.


s/чтобы можно было отловить что-то типа/чтобы можно было отловить сигналы типа

ShTH
() автор топика

Можно ещё порекомендовать QThread, это не отдельный процесс конечно же:)

golodranez ★★★★
()

Можно, как уже посоветовали, создать отдельный подпроект с бизнес логикой и запускать его через QProcess с аргументами. Общение с процессом можно делать следующими способами:

1. Простой сериализацией в потоки ввода/вывода стандартных, либо собственных экземпляров классов с переопределёнными операторами QDataStream >> и <<.

2. Использовать QtSingleApplication ( http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Utilities/qtsin... ) и сигналить в поток строками.

3. Использовать QDBus.

Я бы выбрал первое.

Dendy ★★★★★
()
Ответ на: комментарий от xydo

Наваял подкласс QThread, там запустил мплеер и скормил ему файл из /dev/urandom. Приложение не завершилось.

ShTH
() автор топика
Ответ на: комментарий от ShTH

Создал поток и в нём запустил MPlayer через QProcess? Это совершенно не нужно, я бы сказал даже вредно. У QProcess уже асинхронный интерфейс. Не совсем понятно какая у вас задача.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Запускать mencoder в QProcess. Но если возникает ошибка, то QProcess валит всё приложение.

У QProcess уже асинхронный интерфейс.

Реквестирую кейворды для Assistant'а

ShTH
() автор топика
Ответ на: комментарий от ShTH

QProcess может выполняить программы синхронно и асинхронно. Независимо от этого, если падает запускаемая им программа, это можно увидеть в основной программе. И основная программа, естественно, не должна при этом падать. При чём тут QThread к обсуждаемой теме я не понимаю, это совсем другое.

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

> При чём тут QThread к обсуждаемой теме я не понимаю, это совсем другое.

Вообще по большому счёту QProcess в QThread имеет право на жизнь, если логика общения с процессом тяжёлая, например, разбор потока вывода MPlayer.

Но в данном случае сомневаюсь в целесообразности использования QThread как такового, особенно когда автор не сильно разбирается в Qt. И да, QProcess никогда не валит основное приложение, на то он и процесс.

Dendy ★★★★★
()
Ответ на: комментарий от ShTH

>мплеер и скормил ему файл из /dev/urandom
mplayer на таких файлах НЕ валится в сигфолт.
устрой в QThread-е разыменование нулевого указателя.

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.