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