gpt4 book ai didi

c++ - Boost::process async_wait 进程

转载 作者:行者123 更新时间:2023-11-30 04:37:27 27 4
gpt4 key购买 nike

我正在创建一个程序,并且我正在尽可能地异步执行。

我需要运行一个程序,当这个程序完成时它调用一个回调函数。我找到了一个版本的 boost::process 并决定使用,但似乎有示例但在我下载的源代码中找不到实现,有人可以帮助我吗?

代码示例 http://www.highscore.de/boost/gsoc2010/process/user_guide.html#boost_process.user_guide.waiting并在此处下载源代码 boost::process www.highscore.de/cpp/process/

我需要为它或在那里创建一个实现,但我从错误的地方获得了源代码?

这是解决我的问题的示例代码。

boost::asio::io_service ioservice;

void end_wait(const boost::system::error_code &ec, int exit_code);

int main()
{
std::string exe = boost::process::find_executable_in_path("hostname");
std::vector<std::string> args;
boost::process::child c = boost::process::create_child(exe, args);
boost::process::status s(ioservice);
s.async_wait(c.get_id(), end_wait);
ioservice.run();
}

void end_wait(const boost::system::error_code &ec, int exit_code)
{
if (!ec)
{
#if defined(BOOST_POSIX_API)
if (WIFEXITED(exit_code))
exit_code = WEXITSTATUS(exit_code);
#endif
std::cout << "exit code: " << exit_code << std::endl;
}
}

抱歉我的英语不好问候布鲁诺

最佳答案

我知道这篇文章已经很老了,但它在 Google 中的排名很高(我遇到了同样的问题)。文档错误 - 整个 boost::process::status 类不存在,get_id() 方法实际上是 id().

这是异步等待进程退出的正确方法

#include <iostream>

#include <boost/asio.hpp>
#include <boost/process.hpp>
#include <boost/process/async.hpp>
#include <boost/process/extend.hpp>

struct MyHandler : boost::process::extend::async_handler {
template <typename ExecutorType>
std::function<void(int, std::error_code const&)> on_exit_handler(ExecutorType&) {
return [](int exit_code, std::error_code const& ec) {
if (ec) {
// handle error
}

#if defined(BOOST_POSIX_API)
if (WIFEXITED(exit_code))
exit_code = WEXITSTATUS(exit_code);
#endif
std::cout << "exit code: " << exit_code << std::endl;
};
}
};

int main()
{
boost::asio::io_service io;
boost::process::child child{"/bin/echo", std::vector<std::string>{"testing"}, MyHandler{}, io};
io.run();
}

关于c++ - Boost::process async_wait 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3827734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com