在我的Qt GUI應用程序,我打電話命令提示過:從Qt應用程序調用命令提示符而不凍結?
system("lots.exe & of.exe && commands.exe");
它打開了命令提示符(就像我希望它),但凍結Qt的GUI應用程序,直到我關閉命令提示符。有沒有辦法防止這種情況發生?我看到有一個QProcess類,但無法啓動命令提示符。
任何幫助將不勝感激!
在我的Qt GUI應用程序,我打電話命令提示過:從Qt應用程序調用命令提示符而不凍結?
system("lots.exe & of.exe && commands.exe");
它打開了命令提示符(就像我希望它),但凍結Qt的GUI應用程序,直到我關閉命令提示符。有沒有辦法防止這種情況發生?我看到有一個QProcess類,但無法啓動命令提示符。
任何幫助將不勝感激!
QProcess
確實是答案。如果您想使用類似system()
的東西,您必須將呼叫置於另一個線程中,或使用popen
或類似於您的平臺的東西。
QProcess
確實有setReadChannel
,您可以使用它來顯示自己的控制檯窗口以顯示輸出。
您只需要將該系統調用放在單獨的線程中。
當QProcess可用時無需這樣做。在system()中被阻塞的時候,也不會有中斷線程的好方法,如果底層的.exe不會退出很長時間(或者永遠不會退出) – 2010-07-15 21:47:59
這是系統的一般問題( ), 我同意 :) – 2010-07-16 07:03:19
如果你不需要任何輸出,最簡單的方法是使用QProcess :: startDetached()。
http://doc.qt.io/archives/4.6/qprocess.html#startDetached
如果你需要輸出,QtConcurrent ::含輸出會比獲得的QThread開銷/工作少了futurewatcher運行。
「&&」是否有效?我希望它不起作用,因爲這應該是shell的語法(cmd.exe,bash等),而QProcess不會處理它。編輯:愚蠢的我,這仍然是系統()... – 2010-07-16 07:02:36