利用QProcess::finished訊號(signal)來保持目標程式始終執行
阿新 • • 發佈:2019-01-04
QProcess有一個signal叫做finished,具體定義如下:
void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)
當程序結束的時候,該signal會被髮射出去。exitCode就是程序的退出碼,而exitStatus就是退出狀態。
若在一個系統服務中,想保持另一個程序始終處於執行狀態(比如某server),那麼就可以connect這個finished訊號。詳細程式碼如下:
void keepProcessRunning() { QProcess* p = new QProcess(); QObject::connect(p, &QProcess::started, [] () { qDebug() << "Notepad.exe started!"; }); // Keep restarting if notepad.exe is finished QObject::connect(p, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), [p] (int exitCode, QProcess::ExitStatus exitStatus) { qWarning() << "Notepad.exe was terminated! " << "Exit code: " << exitCode << "Exit status: " << exitStatus; // restart qWarning() << "Notepad.exe will restart... "; p->start(); }); p->start("notepad.exe"); }
以上程式碼中,先連線了started() signal,但這僅僅是為了列印一條語句“Notepad.exe started!”。然後連線了finished signal,其主要動作是再次呼叫p->start(). 但是注意,這裡的start()是不帶引數的。在兩次connect結束之後,呼叫 p->start("notepad.exe"); 以啟動筆記本程式。connect中的p->start()之所以沒有引數,就是因為在它後面呼叫的start是有引數的。而再次start的話,是可以不再註明引數的。