asio网络库同步和异步编程的两个简单例子(C++asio网络库相关)

boost/asio.hpp头文件包括了所需的所有库
先定义io_service连接代码和网络底层的桥梁
deadline_timer停留时间
date_time库主要用于处理具体时间,Chrono时间库用于处理时间段
同步调用例子:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

int main() {
  boost::asio::io_service io;
  boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
  t.wait();
  std::cout << "Hello, world!" << std::endl;

  return 0;
}

异步调用例子:
callback在run中执行的
deadline_timer和async_wait是事件的注册
当没有事件要处理时run才会结束
在这里插入图片描述
当两个线程时执行时间就会比同步阻塞方式短
在这里插入图片描述
在这里插入图片描述
steady_timer与chrono搭配使用的例子:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/steady_timer.hpp>
//#include <boost/date_time/posix_time/posix_time.hpp>

void callback(const boost::system::error_code&) {
  std::cout << "Hello, world!" << std::endl;
}

void callback2(const boost::system::error_code&) {
  std::cout << "second call but first run" << std::endl;
}

int main() {
  boost::asio::io_service io;
	boost::asio::steady_timer st(io);
	st.expires_from_now(std::chrono::seconds(5));
	st.wait();
	std::cout << "hello world\n";
  return 0;
}

BOOST库的时间库比较单一,调用一次就结束了
有的时候希望能调很多次直到程序生命周期停止、希望调用几次后能够取消掉、希望暂时几秒钟(比如某些人物大招有几秒的动画就需要暂停)等等情况就需要来自己手动实现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值