boost asio学习笔记

1:

   发现一个很诡异的问题:

#include <iostream>
#include <boost/asio.hpp>
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace std;

void print(const boost::system::error_code& /*e*/)
{
  std::cout << "Hello, world! ";
}
//
int main()
{
  boost::asio::io_service io;
  cout<<"111111"<<endl;                //111111
  boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
  cout<<1<<endl;          //1
  cout<<t.expires_at()-boost::posix_time::microsec_clock::universal_time()<<" ";
  t.async_wait(print);
  //  cout<<"asd"<<endl;
//  sleep(10);
  io.run();                   //00:00:04.999906 Hello, world! 123       这是等了5s之后才输出的 那就是说 在执行 t.expires_at() 的之前 是等待了5秒的
  cout<<"123"<<endl;
  return 0;
}

#include <iostream>
#include <boost/asio.hpp>
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace std;

void print(const boost::system::error_code& /*e*/)
{
  std::cout << "Hello, world! ";
}
//
int main()
{
  boost::asio::io_service io;
  cout<<"111111"<<endl;
  boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
  cout<<1<<endl;
  cout<<t.expires_at()-boost::posix_time::microsec_clock::universal_time()<<" ";
//  t.async_wait(print);                            //00:00:04.999810 123  这个时候调用 t.expires_at() 函数 是直接输出的
  //  cout<<"asd"<<endl;
//  sleep(10);
  io.run();
  cout<<"123"<<endl;
  return 0;
}

关键在于 t.expires_at() 函数的执行 居然是需要等待5s  为什么??

3:

 关于 多线程io_service.run() 函数 与 strand

 单线程 处理

与 多线程 用strand保护 io_service.run() 有什么区别?

区别存在于效率上面

多线程必然效率上要好 尤其是多核程序的时候 当然咯 在处理共享资源的时候 需要用strand 保护一下子

你可能感兴趣的:(boost)