Boost asio用于写入文件

Boost asio for writing to files

本文关键字:文件 用于 asio Boost      更新时间:2023-10-16

我想异步写入文件。我有一个类,它的函数接受一个向量和文件名,并将其发送到文件。这个函数可以从类外部调用几千次。

我想执行异步写的原因是…调用方可以直接请求写操作,而不必担心它,也不必等待写操作完成。

我没有使用socket, tcp…

我正在寻找boost:: asio,试图找到例子-我能找到的都是使用网络的例子:http://liveworkspace.org/code/3R3RUd%240

使用Boost序列化和发送数据结构?

boost::asio async_read保证所有字节都被读取

等等。

谁能建议一个例子文件i/o ?

我认为您想要做的是完全可以的,假设您的io操作足够复杂,以证明异步实现的开销是合理的。我的简单建议是这样的(抄袭自一个老问题):

#include <thread>
#include <functional>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
void io_operation(int parameter) {
   //Your stuff
}
int main ( int argc, char* argv[] ) {
    boost::asio::io_service io_service;
    boost::asio::io_service::work work(io_service);
    //Set up a thread pool taking asynchronically care of your orders
    std::vector<std::thread> threadPool;
    for(size_t t = 0; t < std::thread::hardware_concurrency(); t++){
        threadPool.push_back(std::thread(boost::bind(&boost::asio::io_service::run, &io_service)));
    }
    //Post an IO-operation
    io_service.post(std::bind(io_operation, 123));
    //Join all threads at the end
    io_service.stop();
    for(std::thread& t : threadPool) {
        t.join();
    }
}

这里假设您可以使用C++11线程。此外,您应该注意,这并不能确保只有一个线程正在写入特定的文件。因此,您可能需要使用链来确保对特定文件的调用不被处理平行。