【问题标题】:Boost process open process in new window (Windows)Boost 进程在新窗口中打开进程 (Windows)
【发布时间】:2021-12-14 20:11:56
【问题描述】:

我正在尝试设计一个使用工作进程的程序 - 这只是一个用 C++ 编写的不同程序。

我像这样启动一个工作进程:

auto worker = boost::process::child("./worker.exe");
worker->detach();

问题在于,工作进程正在将信息输出到生成它们的同一命令行窗口。这使程序的输出变得混乱。理想情况下,我希望每个进程都在自己的窗口中运行。

这可以使用 boost::process 吗?我只找到了关于隐藏窗口的信息。

我使用的是 Windows 和 Visual Studio 2019。

谢谢

【问题讨论】:

    标签: c++ windows multiprocessing boost-process


    【解决方案1】:

    ITNOA

    正如您在Boost::process hide console on windows 中看到的,您可以创建新模式来创建进程。

    CreateProcessA function system call,通过帮助创建标志来展示如何使用新控制台创建新进程:CREATE_NEW_CONSOLE(感谢Using multiple console windows for output

    你可以编写如下代码

    struct new_window
    :   ::boost::process::detail::handler_base
    {
        // this function will be invoked at child process constructor before spawning process
        template <class WindowsExecutor>
        void on_setup(WindowsExecutor &e) const
        {
            e.creation_flags = ::boost::detail::winapi::CREATE_NEW_CONSOLE_;
        }
    };
    

    为了使用它,你可以像下面这样写

    ::boost::process::child ch("./worker.exe", new_window);
    

    【讨论】:

    • 感谢您的回答。什么是#includes 让这个工作?
    • 没关系,这是#include
    • 非常感谢,效果很好!作为奖励,您能告诉我 env 参数的用途吗?在我的应用程序中没有它,它工作得很好。
    • 不重要,我只是明确指定流程环境。 (我删除它,以尽量减少答案)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多