c++ - 在 Windows 上,将Ctrl+C事件发送到使用QProcess启动的进程

  显示原文与译文双语对照的内容
0 0

我有一个对话框,充当控制台应用程序的配置器。 对话框是为用户提供一组小部件( 。控制台应用程序支持哪些选项),当用户单击"开始"按钮时,该对话框根据GUI的状态创建和启动 QProcess 。 我能够成功地启动这个过程,一切都正常。 但是,当我想终止进程时,控制台应用程序需要正常关闭,这意味着必须关闭文件。刷新数据。关闭设备 等等,然后终止进程。

我使用 qprocess:: 关闭( ),这会立即杀死应用程序,而应用程序无法正常关闭。

我使用了 WIN32 GenerateConsoleCtrlEvent(CTRL_C_EVENT, Q_PID::dwProcessId) 发送连接到相同的。 我看到上面的API返回一个非零值( 如果成功,它将在失败时返回 0 ),但是我的进程继续运行。

谁能帮助我 signal QProcess正常关机? 还是还有别的方法来做这个?

时间:原作者:3个回答

0 0

GenerateConsoleCtrlEvent 采用进程 id,而不是进程 id 。 你可能正在给它提供进程 id,因为 QProcess 提供了。

QProcess 不支持在此时创建进程组。 你需要使用of手动启动进程,或者者修补Qt的副本来修改 qtbase/src/corelib/io/qprocess[.h,.cpp,_win.cpp] 传递 CREATE_NEW_PROCESS_GROUP 创建标志。

如果你不想调整Qt本身,可以将qprocess文件复制到项目,重命名类,并在其中添加更改。

原作者:
...