2014-03-07 70 views
2

我有一個對話框,用作控制檯應用程序的配置程序。對話框的工作是爲用戶提供一組小部件(鏡像控制檯應用程序支持的選項),當用戶單擊「開始」按鈕時,該對話框將創建並啓動一個QProcess,控制檯應用程序的名稱和參數基於GUI中小部件的狀態。我能夠成功開始這個過程,一切正常。但是,當我想殺死進程時,控制檯應用程序需要正常關閉,這意味着它必須關閉文件,刷新數據,關閉設備等,然後終止。將Ctrl + C事件發送到在Windows上使用QProcess啓動的進程

我使用QProcess :: close(),這會立即殺死應用程序,並且應用程序無法正常關閉。

我已經使用Win32 GenerateConsoleCtrlEvent(CTRL_C_EVENT, Q_PID::dwProcessId)發送一個甚至相同。我發現上面的API返回一個非零值(表示成功,失敗時返回0),但是我的過程繼續運行。

任何人都可以幫助我如何指示QProcess正常關機?或者還有其他方法可以做到這一點嗎?

+0

你確定有問題的應用程序實際上處理Ctrl-C嗎?你有它的源代碼嗎? –

+0

是的。我的代碼正在處理Ctrl + C和Ctrl + Break事件。 – Bharath

回答

1

GenerateConsoleCtrlEvent需要一個過程 ID,而不是進程ID。你可能會給它一個進程ID,因爲這是QProcess提供的。

QProcess此刻不支持創建進程組。您需要使用winapi手動啓動進程,或者修補您的Qt副本以修改qtbase/src/corelib/io/qprocess[.h,.cpp,_win.cpp]以通過CREATE_NEW_PROCESS_GROUP創建標誌。

如果您不想調整Qt本身,您可以將qprocess文件複製到您的項目中,重命名類並在其中添加更改。

相關問題