Boost asio用于写入文件
Boost asio for writing to files
我想异步写入文件。我有一个类,它的函数接受一个向量和文件名,并将其发送到文件。这个函数可以从类外部调用几千次。
我想执行异步写的原因是…调用方可以直接请求写操作,而不必担心它,也不必等待写操作完成。
我没有使用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
线程。此外,您应该注意,这并不能确保只有一个线程正在写入特定的文件。因此,您可能需要使用链来确保对特定文件的调用不被处理平行。
相关文章:
- 如何通过Conan和CMake找到用于pkg配置的.pc文件
- 更正 CMakeList.txt 用于谷歌测试的文件?
- 为什么make_optional不适用于文件流?
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- meson-build:wxWidgets 资源文件,用于 Windows 未构建
- 用于构建 cuda .so 文件(共享库)的生成文件
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- 一个C++程序,用于在输入位数时输出具有特定位数的 .txt 文件中的所有数字
- 用于 progmem 的C++和头文件压缩的 Web 文件字节数组
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- 用于 Windows 写入临时文件的 mkstemp() 实现
- 用于随机数据访问的最有效文件类型
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 标题文件用于OpenCV中的图像denoising
- qtCreator 错误:无法映射文件,errno=22 文件用于架构x86_64?
- 从Visual Studio解决方案生成生成生成文件(用于GCC)
- Gradle C(本机)任务输出文件(用于其他任务/项目)
- 将二进制文件用于复杂对象C++
- 如何在没有 fstream 的情况下进行文件 I/O 用于谷歌代码堵塞等比赛