《C++Boost库asio》第一篇
时间相关:延迟5秒1.同步
#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;
}
2.异步
#include <iostream>
#include <boost/asio.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::deadline_timer t(io, boost::posix_time::seconds(5));
t.async_wait(callback);//注册事件,当过了5秒钟后来调用.
boost::asio::deadline_timer t(io, boost::posix_time::seconds(2));
t.async_wait(callback2);//注册事件,当过了2秒钟后来调用.
//虽然是后注册的事件,但是会被先调用,因为先满足条件的先调用,跟注册的顺序无关
std::cout << "start run\n";
io.run();//callback是在run里面执行的
std::cout << "finish run\n";
//什么时候会退出呢,当io.stop的时候,或者当消息池没有注册事件了,也就是事件都处理完了。
return 0;
}
新的timer
#include <boost/asio/steady_timer.hpp>//要单独引入,没有包含在asio这个头文件里,因为怕引
入多余的内容,所以把steady_timer.hpp从asio.hpp中分割开了
int main() {
boost::asio::io_service io;
boost::asio::steady_timer st(io);
同步:
st.expires_from_now(std::chrono::seconds(5));//从这一刻开始调用起,chrono时间库更精确
st.wait();//柱塞事;
异步:
?st.expires_from_now(std::chrono::seconds(5));
?t.async_wait(callback2);
std::cout << "hello world\n";
return 0;
}
自定义的time类作用:
1.可配置的,调用一次还是多次,还是无线调用
2.timer类可以被取消掉,比如跑10次,跑到第五次就可以取消掉
3.可以暂停几秒钟,比如:一局游戏,每个玩家只有15秒钟,但是突然有个玩家要发大招,可能要2秒
中,这个时候就希望time类可以暂停2秒钟,把这个放大招的时间也考虑进去
这些功能都可以用boost/asio里面的time类来实现
第一次在论坛发帖,写的比较乱。
以前在任何论坛,都是看帖子,从来没发过帖子。
这次小甲鱼大神举办活动,一定要支持下。
这个论坛真的很不错,希望越办越好,能在这里学习一辈子,跟着大家一起进步。
建了一个,《C++Boost库asio》学习笔记,已经发了6篇
发完后才发现,排版很乱,现在慢慢的在下面回帖来整理下{:10_254:}
在看了小甲鱼大神的《C++快速入门》后,想用C++的Boost库里的Asio搭个简单的服务器
首先是下载VS2017
VS2017
安装Boost库
这个过程折腾了很久,我放出折腾过程中的网址,不懂的可以回帖问我,这里就不具体写出来{:10_250:}
Boost1.62.0 + VS2015 默认编译与配置
http://www.jianshu.com/p/93b52d90cd92
http://www.cnblogs.com/zhcncn/p/3950477.html
如何使用VS2017编译boost
如果你是使用CodeBlocks的,可以参考下下面2个网址(都是百度里找到的帖子{:10_245:})
(CodeBlocks+MingW)安装和使用Boost
CodeBlocks配置TDM-GCC编译环境
最后给大家推荐我在学的一个不错的《Boost库asio》网络教程
Boost.Asio C++ 网络编程 做服务器前,先做些准备工作
首先是和时间相关的2个类
1. posix_time
同步
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
//过了5秒钟后来调用
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;
}
异步
#include <iostream>
#include <boost/asio.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::deadline_timer t(io, boost::posix_time::seconds(5));
t.async_wait(callback);//注册事件,当过了5秒钟后来调用.
boost::asio::deadline_timer t(io, boost::posix_time::seconds(2));
t.async_wait(callback2);//注册事件,当过了2秒钟后来调用.
//虽然是后注册的事件,但是会被先调用,因为先满足条件的先调用,跟注册的顺序无关
std::cout << "start run\n";
io.run();//callback是在run里面执行的
std::cout << "finish run\n";
//什么时候会退出呢,当io.stop的时候,或者当消息池没有注册事件了,也就是事件都处理完了。
return 0;
}
同步和异步的区别就不解释了,具体内容可以百度{:10_245:}
2. steady_timer(个人推荐){:10_279:}
#include <boost/asio/steady_timer.hpp>//要单独引入,没有包含在asio这个头文件里,因为怕引
入多余的内容,所以把steady_timer.hpp从asio.hpp中分割开了
int main() {
boost::asio::io_service io;
boost::asio::steady_timer st(io);
//同步: st.expires_from_now(std::chrono::seconds(5));//从这一刻开始调用起,chrono时间库更精确
st.wait();//柱塞事;
//异步:
st.expires_from_now(std::chrono::seconds(5));
?t.async_wait(callback2);
std::cout << "hello world\n";
return 0;
}
等简单服务器搭完后,我会写个自定义的time类
自定义time的作用:
1.可配置的,调用一次还是多次,还是无限调用
2.timer类可以被取消掉,比如跑10次,跑到第五次就可以取消掉
3.可以暂停几秒钟,比如:一局游戏,每个玩家只有15秒钟,但是突然有个玩家要发大招,可能要2秒中,这个时候就希望time类可以暂停2秒钟,把这个放大招的时间也考虑进去
这些功能都可以用boost/asio里面的time类来实现
页:
[1]