Boost Asio run() run_one() poll() poll_one()的区别

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;
}

输出为:(空)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值