Call分析(二)之ProcessThread和Module

本文解析了一种模块化任务处理机制,通过ProcessThread管理多个Module,并在独立线程中循环执行各Module的任务处理过程。当注册新的Module时,不仅将其加入到待处理队列中,还会唤醒工作线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们看下Call里面的两个成员module_process_thread_和
pacer_thread_,从名字可看出他们是跟线程运行有关的,具体看下他们的类图:
这里写图片描述

实际上,当我们要运行一个任务时,会将它打包成一个Module, 然后放到一个新的线程里面去运行,我们先来看下ProcessThread的Start()函数里面执行了什么:
这里写图片描述

由图可见,调用Start()后会创建一个新线程,在线程中循环遍历module,执行module的process(), 遍历queue, 执行task的run(), 然后调用wake_up->Wait()进入休眠,等待下一次唤醒。

我们再来看一下ProcessThread的RegisterModule函数:

void ProcessThreadImpl::RegisterModule(Module* module) {
  modules_.push_back(ModuleCallback(module));
  wake_up_->Set();
}

我们可以看到他只是将module插入modules队列,然后唤醒线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值