当前位置: 首页 > news >正文

做网站的公司 苏迪/市场推广渠道有哪些

做网站的公司 苏迪,市场推广渠道有哪些,营销型平台网站,小户型室内装修设计公司网站经过一段时间的Asio使用,理清楚了一些基本的概念,这里和shared_ptr指针一起总结一下1、Asio中,不管写(Write)还是读(Read)都需要等待相应的事件完成后再发起下一次写或者读。读操作比较好办&…

经过一段时间的Asio使用,理清楚了一些基本的概念,这里和shared_ptr指针一起总结一下
1、Asio中,不管写(Write)还是读(Read)都需要等待相应的事件完成后再发起下一次写或者读。读操作比较好办,在handle_read事件中直接进行下一次async_read操作就可以,但是写的话得自己管理一个deque队例,在写入操作完成后则自动把最顶的数据包弹出,然后开始写下一个(如果在缓冲队列中还有剩余的数据包);
2、Asio中,不管任何的函数调用,若有未涉及error_code和涉及error_code的相同功能函数存在,则使用涉及error_code的函数调用,并且处理错误信息,否则io_service会因为异常而退出消息循环;
3、若session或其它的类是使用shared_ptr来包装的,则需要将该类继承于enable_shared_from_this,否则会有可能在该对象已经被删除的情况下,该对象内的异步回调函数被调用,这样会导致程序崩溃退出;
4、要注意,当类继承了enable_shared_from_this后,在构造函数中千万不要调用shared_from_this()函数,否则程序会抛掷异常;
5、如果类中有方法暴露在外,而有可能是非线程安全调用的,则使用io_service::post函数来调用asio中的函数,以保证asio的回调是线程安全的;

示例代码如下:(注:因为只是代码片断,随便手写,而且只是为了说明问题,所以并未检查过编译是否通过)

 

#include <deque> 

#include <boost/asio.hpp>

#include <boost/shared_ptr.hpp>
#include <boost/bind.hpp>
#include <boost/enable_shared_from_this.hpp>
 
using namespace boost::asio;
using namespace boost::asio::ip;
 
typedef boost::shared_ptr<tcp::socket> socket_ptr;
typedef std::pair<void*, std::size_t> buffer_type;
typedef std::deque<buffer_type> buffer_deque;
 
class session : public boost::enable_shared_ptr_from_this<session>
{
public:
  session(io_service& ios, socket_ptr sp)
    : ios_(ios)
    , sp_(sp)
  {
  }
  void start_read()
  {
    async_read_until(*sp_, sb_, '\n', boost::bind(&session::handle_read, shared_from_this(), placeholders::error);
  }
  void send(void const* p, std::size_t size)
  {
    bool need_write = buffers_.empty();
    buffers_.push_back(std::make_pair(p, size));
    if (need_write) ios_.post(boost::bind(&session::do_send, shared_from_this()));
  }
  void close()
  {
    boost::system::error_code ec;
    sp_->shutdown(tcp::socket::shutdown_both, ec);
    if (ec) std::cout << ec.message().c_str() << std::endl;
    sp_->close(ec);
    if (ec) std::cout << ec.message().c_str() << std::endl;
  }
private// do functions
  void do_send()
  {
    async_write(*sp, buffer(buffers_.begin()->first, buffers_.begin()->second), boost::bind(&sessions::handle_write, shared_from_this(), placeholders::error));
  }
private// handlers
  void handle_read(boost::system::error_code const& ec)
  {
    if (!ec)
    {
      std::istream is(&sb_);
      std::string cmd;
      std::getline(is, cmd);
      // todo: handle command
      start_read(); // start next round
    }
    else
    {
      std::cout << ec.message().c_str() << std::endl;
      close();
    }
  }
  void handle_write(boost::system::error_code const& ec)
  {
    if (!ec)
    {
      buffers_.pop_front();
      if (!buffers_.empty()) do_send();
    }
    else
    {
      std::cout << ec.messages().c_str() << std::endl;
      close();
    }
  }
private:
  io_service& ios_;
  socket_ptr sp_;
  streambuf sb_;
  buffer_deque buffers_;
};

转载于:https://www.cnblogs.com/toosuo/archive/2012/05/24/2516874.html

http://www.lbrq.cn/news/1025497.html

相关文章:

  • 做烘培网站/关键词排名优化易下拉霸屏
  • 公益手游app平台/淮南网站seo
  • 为什么要建立网站/网站排名
  • 商标做网站logo/保定网站seo
  • 网站建设官方商城/百度广告公司联系方式
  • ppt做仿网站点击效果/天津网站优化
  • 专门做卫生间效果图的网站/进入百度app
  • 东营网站建设优化/seo外链友情链接
  • 网页设计个人网站作业/重庆森林电影高清在线观看
  • 现在哪些网站做外贸的好做/企业如何进行网站推广
  • 旅游网站制作方案/全网推广平台推荐
  • wordpress注册页面更改/seo上海优化
  • 优秀金融网站设计/收录提交入口网址
  • google网站优化工具/可以免费发广告的网站
  • 纪检委网站建设情况/北京网站推广助理
  • 室内设计考研/百度网站如何优化排名
  • 武汉网站备案/线上广告投放方式
  • 菏泽网站建设效果/汕头网站建设方案维护
  • 网站建设公司下载/石家庄谷歌seo
  • 东莞做网站公司/百度提问登陆入口
  • 旅游网站建设的论文/商丘网站优化公司
  • 自己做网站卖衣服/下载百度免费
  • 高端品牌男鞋/seo快速排名优化方式
  • 腾讯云做网站/成都网站seo技巧
  • 网站建设学习/seo软件推广
  • 学做网站论坛vip视频/引流推广营销
  • 业余做网站/合理使用说明
  • 网上车辆租赁网站怎么做/阿里巴巴怎么优化关键词排名
  • 时时彩 网站开发/seo的优化流程
  • phpwind能做网站吗/百度推广代理商返点
  • 深度学习-卷积神经网络CNN-批量归一化 BatchNorm
  • 最新去水印小程序系统 前端+后端全套源码 多套模版 免授权(源码下载)
  • 更新pip及Python软件包的完整指南
  • OpenCV阈值处理详解
  • EN 61010电子电气设备安全要求标准
  • 基于js和html的点名应用