Task类

Darwin中的Task相关的类有三种: TaskThreadPool(Task线程池类)、TaskThread(Task线程类)、Task类。


每个Task类都有Signal()和Run()方法。


每个线程任务TaskThread类都含有一个 OSQueue_Blocking 队列,该队列保存着该类需要去执行的任务。服务器调用一个任务的Signal()函数,实际上是将任务加载到OSQueue_Blocking队列中去的。


TaskThread->Entry() 依靠WaitForTask()来检测是否有新任务,如果有新任务加入,则在规定时间内执行;否则阻塞。

TaskThread->Entry()中 theTimeout = theTask->Run();

theTimeout返回值有以下意义:

< 0  任务结束

= 0  任务在下次被调用时,立即被执行

> 0  任务在等待timeout后,希望立即被执行。意味着该任务是一个周期性的工作,如一视频泵,需要一直发送视频直到视频结束。


DSS系统中,经常将一个Task对象和一个Socket对象关联在一起,当Select()发现Socket对象中有事件过来,就会通过Signal()去通知Task对象,最终调用到TaskThread的Run方法。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页