关于muduo库中EventLoop的runInLoop功能

EventLoop可以在他的IO线程中执行某个用户任务回调,即

EventLoop::runInLoop(const Functor& cb)

其中Functor是boost::function<void()>。    

如果用户在当前IO线程中调用这个函数,回调会同步进行;如果用户在其他线程调用runInLoop,cb会被加入队列,IO线程会被唤醒来调用这个Functor

针对这点,我们来看看EventLoop的Loop函数
 

void EventLoop::runInLoop(Functor&&cb)
{
	if(isInLoopThread())
		cb();
	else
		queueInLoop(std::move(cb));
}

void EventLoop::queueInLoop(Functor&&cb)
{
	{
		MutexLockGuard lock(mutex_);
		pendingFunctors_.emplace_back(std::move(cb));
	}
	if(!isInLoopThread()||callingPendingFunctors_)
		wakeup();
}
void EventLoop::loop()
{
	assert(!looping_);
	assert(isInLoopThread());
	looping_=true;
	quit_=false;
	std::vector<SP_Channel>ret;
	while(!quit_)
	{
		ret.clear();
		ret=poller_->poll();
		eventHandlding_=true;
		for(auto & it :ret)
			it->ha
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值