C++ boost asio 学习(一)

跟着 http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/tutorial.html 学习asio。


编译的时候需要加上 -lboost_system

同步定时器例子


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

using namespace std;

void tuttimer1()
{
boost::asio::io_service io;

// 等待5秒
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));

t.wait();
}


int main() {
tuttimer1();
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!

return 0;
}


异步定时器例子

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

// 定义回调函数,asio库要求回调函数只能有一个参数,且为 const boost::system::error_code & 类型
void print(const boost::system::error_code& /*e*/) {
cout << "This is asynchronous timer!" << endl;
}

void tuttimer2()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));

cout << "asynchronous timer start!" << endl;
t.async_wait(&print); // 异步等待,传入回调函数,立即返回
cout << "asynchronous timer processing!" << endl;

io.run(); // 很重要!异步IO必须。如果不调用run(),
// 虽然操作被异步执行了,但没有一个等待它完成的机制,回调函数将得不到执行机会。
cout << "asynchronous timer end!" << endl;
}

int main() {
tuttimer2();
return 0;
}

/*
运行结果:
asynchronous timer start!
asynchronous timer processing!
This is asynchronous timer!
asynchronous timer end!
*/


异步定时器使用bind

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

void print1(const boost::system::error_code& /*e*/,
boost::asio::deadline_timer* t, int* count)
{
if (*count < 5)
{
cout << *count << "\n" << endl;
++(*count);

t->expires_at(t->expires_at() + boost::posix_time::seconds(1));

t->async_wait(boost::bind(print1, boost::asio::placeholders::error, t, count));
}

}

void tuttimer3()
{
boost::asio::io_service io;
int count = 0;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(1));

t.async_wait(boost::bind(print1, boost::asio::placeholders::error, &t, &count));

io.run();

cout << "Final count is " << count << "\n" << endl;
}

int main() {
tuttimer3();
return 0;
}
/*
运行结果:
0

1

2

3

4

Final count is 5
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值