run()会以阻塞的方式等待所有异步操作(包括post的回调函数)完成然后返回。
#include <cstdio>
#include <boost/asio.hpp>
int main()
{
boost::asio::io_service ios;
ios.post([]() {printf("hello hi1\n"); });
ios.post([]() {printf("hello hi2\n"); });
boost::asio::steady_timer timer1(ios, std::chrono::seconds(5));
boost::asio::steady_timer timer2(ios, std::chrono::seconds(10));
timer1.async_wait([](const boost::system::error_code& ec) { printf("5 second\n"); });
timer2.async_wait([](const boost::system::error_code& ec) { printf("10 second\n"); });
ios.run();
return 0;
}
输出为:
hello hi1
hello hi2
5 second
10 second
run_one()也会以阻塞的方式完成一个异步操作(包括post的回调函数)就返回。
#include <cstdio>
#include <boost/asio.hpp>
int main()
{
boost::asio::io_service ios;
ios.post([]() {printf("hello hi1\n"); });
ios.post([]() {printf("hello hi2\n"); });
boost::asio::steady_timer timer1(ios, std::chrono::seconds(5));
boost::asio::steady_timer timer2(ios, std::chrono::seconds(10));
timer1.async_wait([](const boost::system::error_code& ec) { printf("5 second\n"); });
timer2.async_wait([](const boost::system::error_code& ec) { printf("10 second\n"); });
yi
ios.run_one();
return 0;
}
输出为:
hello hi1
poll()以非阻塞的方式检测所有的异步操作,如果有已经完成的,或者是通过post加入的异步操作,直接调用其回调函数,处理完之后,然后返回。不在处理其他的需要等待的异步操作。
情形一:
#include <cstdio>
#include <boost/asio.hpp>
int main()
{
boost::asio::io_service ios;
ios.post([]() {printf("hello hi1\n"); });
ios.post([]() {printf("hello hi2\n"); });
boost::asio::steady_timer timer1(ios, std::chrono::seconds(5));
boost::asio::steady_timer timer2(ios, std::chrono::seconds(10));
timer1.async_wait([](const boost::system::error_code& ec) { printf("5 second\n"); });
timer2.async_wait([](const boost::system::error_code& ec) { printf("10 second\n"); });
ios.poll();
return 0;
}
输出为:
hello hi1
hello hi2
情形二:
#include <cstdio>
#include <boost/asio.hpp>
int main()
{
boost::asio::io_service ios;
boost::asio::steady_timer timer1(ios, std::chrono::seconds(5));
boost::asio::steady_timer timer2(ios, std::chrono::seconds(10));
timer1.async_wait([](const boost::system::error_code& ec) { printf("5 second\n"); });
timer2.async_wait([](const boost::system::error_code& ec) { printf("10 second\n"); });
ios.poll();
return 0;
}
输出为:(空)
poll_one() 以非阻塞方式完成一个异步操作(已经完成的)就立即返回,不在处理其他已经完成的异步操作和仍需等待的异步操作。
情形1:
#include <cstdio>
#include <boost/asio.hpp>
int main()
{
boost::asio::io_service ios;
ios.post([]() {printf("hello hi1\n"); });
ios.post([]() {printf("hello hi2\n"); });
boost::asio::steady_timer timer1(ios, std::chrono::seconds(5));
boost::asio::steady_timer timer2(ios, std::chrono::seconds(10));
timer1.async_wait([](const boost::system::error_code& ec) { printf("5 second\n"); });
timer2.async_wait([](const boost::system::error_code& ec) { printf("10 second\n"); });
ios.poll_one();
return 0;
}
输出为:
hello hi1
情形2
#include <cstdio>
#include <boost/asio.hpp>
int main()
{
boost::asio::io_service ios;
boost::asio::steady_timer timer1(ios, std::chrono::seconds(5));
boost::asio::steady_timer timer2(ios, std::chrono::seconds(10));
timer1.async_wait([](const boost::system::error_code& ec) { printf("5 second\n"); });
timer2.async_wait([](const boost::system::error_code& ec) { printf("10 second\n"); });
ios.poll_one();
return 0;
}
输出为:(空)