boost常用库的使用总结

一、多线程:
1、thread库相关的,c++多线程是一个复杂的事情,windows MFC提供了CWinThread类,WaitForSingleObject等待回收线程;
Linux系统提供了createThread,thread join来回收线程。
boost::thread就比较方便了:
1)、boost::thread(boost::bind(&class::func,this)).detach()。thread()启动一个线程,bind线程绑定的
需要执行的任务接一个函数指针,detach,父线程不需要管子线程的回收。
2)、boost::thread thd1(func());参数是一个函数调用
      thd1.join();父线程来进行回收。
2、线程同步用互斥量boost::mutex,锁用boost::mutex::scoped_lock,来进行时序控制。
比如boost::mutex::scoped_lock lock(m_mutex);互斥量相当于是钥匙,lock相当于是锁,当获取这个钥匙的锁生命周期结束后,则钥匙释放。
mutex可以看成是通配的钥匙。
还有一种是AutoLock lock (&_operMutex);

二、网络编程:
网络编程分为同步模式和异步模式,同步模式是有一个数据块客户端发送过来,服务端就必须处理完才能处理下一个数据块。
异步模式是客户端发送的数据块放入缓存队列,异步处理不阻塞,同步模式是阻塞式的。
1、同步模式:
服务端:
// 创建服务器对象
boost::asio::io_service ios;#asio编程必须的io_service对象,服务端和客户端创建socket和服务端创建acceptor对象要用
boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(),9800);#tcp协议的服务器所在的ip和网络编程开放的端口,客户端连接的ip和端口
boost::asio::ip::tcp::acceptor acceptor(ios,ep);
// 监听连接
while(1){
     boost::asio::ip::tcp::socket sock(ios);#创建socket连接对象
     acceptor.accept(sock);
     cont<

     boost::thread(boost::bind(svr_handle,sock)).detach();
}
//交互处理

void svr_handle(boost::asio::ip::tcp::socket sock)

{
      string msg;
      sock.write_some(boost::asio::buffer("hello world"));
      char msg[1024];
      sock.read_some(boost::asio::buffer(msg));
      cout<<"client send msg:"<

}
客户端:
// 创建客户端对象
boost::asio::io_service ios;#asio编程必须的io_service对象
boost::asio::ip::tcp::endpoint ep("127.0.0.1",9800);
//监听连接
std::shared_ptr p_sock(ios);#创建socket连接对象
p_sock->connect(ep);
string msg;
p_sock->write_some(boost::asio::buffer(msg));
char buf[1024];
p_sock->read_some(boost::asio::buffer(buf));

2、异步模式
服务端:
监听由同步模式的accept()变成了async_accept();
读写由同步模式的write_some()、read_some()变成了async_write_some()、async_read_some()
异步模式关键是void Server::run(){ios.run();//io_service的run方法异步处理队列}。

boost::asio::io_service ios;

boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(),9800);

shared_ptr s_ptr(new boost::asio::ip::tcp::socket(ios));

boost::asio::ip::tcp::acceptor acc(ios,ep);

start_accept();

ios.run();

void start_accept()

{acc.async_accept(*s_ptr,boost::bind(handle_accept,s_ptr,1));}

void handle_accept(shared_ptr s_ptr,boost::system::error_code ec)

{

    if(err) return ;

    socket_ptr sock(new ip::tcp::socket(service));

    start_accept(sock);

}

当接收到客户端连接的时候,handle_accept被调用。当连接之后socket则就能使用了。

客户端:
连接由同步模式的connect()变成了async_connect();
读写由同步模式的write_some()、read_some()变成了async_write_some()、async_read_some()
异步模式关键是void Client::run(){ios.run();//io_service的run方法异步处理队列}。

boost::asio::io_service ios;

boost::asio::ip::tcp::endpoint ep("127.0.0.1",9800);
//监听连接
std::shared_ptr p_sock(ios);#创建socket连接对象

p_sock->async_connect(ep,handle_connect);

ios.run();

void handle_connect(const boost::system::error_code ec)

{//如果ec返回成功了,就知道连接是成功的了}

当handle_connect连接上了,则ios.run()就会循环退出。

三、文件系统:
文件系统相关的方法一般都在boost::filesystem命名空间中。
boost::filesystem::path filepath(path);
filepath.parent_path();//获取父路径
filepath.filename();//包括文件扩展名
boost::filesystem::file_size(filepath);//获取文件大小,单位是字节
boost::filesystem::is_regular_file(path);//判断是否是普通文件
boost::filesystem::is_directory(path);//判断是否是目录
boost::filesystem::is_symlink(path);//判断是否是链接文件

你可能感兴趣的:(boost)