В чем разница между QProcess::start и QProcess::startDetached?
документация Qt дает это объяснение:
-
QProcess::start
:запускает данную программу в новом процессе, если ни одна из них еще не запущена, передача аргументов командной строки в аргументах.
-
QProcess::startDetached
:запускает программу с аргументами аргументов в новом процесс, и отделяется от него.
что такое разница между ними? Только разница в том, что вы можете запустить только один экземпляр программы, используя QProcess::start
и многие экземпляры, использующие QProcess::startDetached
?
2 ответов
Если вы используете start
, прекращение вызывающего процесса приведет к прекращению вызываемого процесса. Если вы используете startDetached
, после завершения вызывающего абонента, ребенок будет продолжать жить. Например:
QProcess * p = new QProcess();
p->start("some-app");
delete p;// <---some-app will be terminated
QProcess * p = new QProcess();
p->startDetached("some-app");
delete p;// <---some-app will continue to live
функция start () является функцией-членом, а startDetached-статической функцией класса.
Если вы посмотрите на документация QProcess, вы увидите, что есть функции, которые позволяют вам делать вещи с процессом, такие как: -
- получение выходных потоков или потоков ошибок из запущенного процесса (readAllStandardOutput / readAllStandardError)
- перенаправить вывод в файл (setStandardOutputFile)
- использовать файл для стандартного ввода в процесс (setStandardInputFile)
- связь по каналам
- Get уведомление о завершении процесса
Это лишь некоторые из вещей, которые вы можете сделать только с экземпляром QProcess. Если, однако, вы хотите простой и быстрый способ запуска процесса без создания экземпляр и вам не нужна дополнительная функциональность, вы можете просто вызвать QProcess:: startDetached.
кроме того, как состояние docs для startDetached: -
Если вызывающий процесс завершает работу, отсоединенный процесс будет продолжать жить.