相关疑难解决方法(0)

使用 boost.process 同时读取和写入子级的 stdio

我正在尝试使用 boost.process 写入和读取子级的 stdio,如下所示:

boost::asio::io_service writeService, readService;
bp::async_pipe in{writeService};
bp::async_pipe out{readService};

bp::child process(CompressCmd.c_str(), bp::std_in < in, bp::std_out > out);
Buffer src;
src.reserve(4 * 1024 * 1024);
integer_type read = 0;
//std::atomic_int64_t totalWrite{0};
integer_type totalWrite = 0;
while (callback(CallbackActions::NeedMoreInput, src, read)) {
    in.async_write_some(
        boost::asio::buffer(src.data(), read),
        [](const boost::system::error_code &e, std::size_t) { });
    // written data is not important, that's why using same buffer
    out.async_read_some(boost::asio::buffer(src.data(), src.capacity()),
                        [&](const boost::system::error_code &e,
                           std::size_t byte_transferred) { totalWrite += byte_transferred; });
}
writeService.run();
in.close();
readService.run();
Run Code Online (Sandbox Code Playgroud)

所有读写操作都被通知为成功,但totalWrite的值完全不正确,报告为29356032,实际值应该约为50000000
我注意到程序正在中途终止,
在readService.run()冻结子进程后使用process.wait(), …

c++ windows boost boost-asio boost-process

1
推荐指数
1
解决办法
1941
查看次数

标签 统计

boost ×1

boost-asio ×1

boost-process ×1

c++ ×1

windows ×1