我有一个GUI程序,通过单击按钮启动cli程序。我想看到控制台窗口,不需要等到cli程序结束。所以我使用这样的代码:
QProcess::startDetached("cmd.exe");
单击按钮后,我看不到控制台窗口。但请参阅任务管理器中的cmd.exe进程。
我尝试使用system()命令,但它在cli程序结束前冻结我的应用程序。
有没有办法让窗口可见?
答案 0 :(得分:-1)
这是预期的行为。至少在Windows中startDetached
相当于使用DETACHED_PROCESS
标志调用CreateProcess
,新进程不会继承其父控制台。有意义的是,在其他平台上,该方法可以做类似的事情。
在这种情况下,您必须在新进程上使用AllocConsole
手动分配一个新进程(请注意,您可能需要将流式处理程序重定向到新控制台),或尝试启动该过程采用不同的方式(选中CreateProcess
或fork
)。
system
冻结你的应用程序的原因是因为它是一个同步调用,所以它不会返回控件直到另一个进程完成。您可以尝试从单独的线程调用system
,这样就可以避免阻止应用程序的主事件循环。