EasyDarwin Streaming Server对Task的调用方法
2023-09-14 08:59:59 时间
我们在EasyDarwin流媒体服务器的二次开发过程中,经常会需要定义自己的Task类,例如在EasyDarwin中,RTSPSessioin、HTTPSession、RTCPTask等,都是Task,Task是Darwin任务调度的对象,或者打个比方,Task就像是平时快递的包裹一样,包裹有各种各样的:衣服、鞋子、袜子、手机、电脑等等,各种各样,包裹的流程:新建、传输、投递、处理,整个过程,Task从创建、Signal投递到TaskThread任务队列、Task::Run()取出处理,跟包裹的处理原理是一样的;
Darwin中,几乎所有的工作完成都是用Task来进行包裹处理的,这里我们简单自定义一个Task:
//MyTask class MyTask : public Task { public: MyTask() : Task() {this->SetTaskName("MyTask"); } virtual ~MyTask() {} private: virtual SInt64 Run(); };
例如这里,我们定义了一个Task类MyTask,那么我们可以新建一个MyTask的对象,然后将MyTask对象投递到TaskThread任务队列里面,等待Darwin底层任务处理队列进行处理:
//创建MyTask对象 MyTask* myTask = new MyTask(); //投递到Task任务队列中,定义事件类型为kStartEvent myTask->Signal(Task::kStartEvent);
如上,我们创建了一个MyTask的任务,投递到了任务队列中,同时还定义了投递的任务事件类型(类型可以自己定义),这样做的好处就是:能够充分利用处理Task的线程池,而且保证了任务处理的灵活性,下面我们再看上面投递的任务如何进行处理的:
SInt64 MyTask::Run() { //获取事件类型,同时能够清空投递的事件类型,避免Run()一直重复被调用 EventFlags events = this->GetEvents(); if(events & Task::kTimeoutEvent) { qtss_printf("超时事件处理"); } if(events & Task::kKillEvent) { qtss_printf("析构事件处理"); } if(events & Task::kReadEvent) { qtss_printf("网络读取事件处理:进行Socket读取"); } ... return 1000;//小于0表示删除此Task对象;等于0表示有Signal再调用到时Run;大于0表示多少毫秒后再次执行Run }
获取更多信息
Copyright © EasyDarwin.org 2013-2016
相关文章
- 用Navicat连接mysql报错:2003-Can't connect to MySql server on '10.100.0.109'(10039)
- SQL Server中的“最大并行度”的配置建议
- SQL server怎么查找某个时间段(多个时间段)的第一个值 或 最后一个值(这里举例查找每小时的第一个值)(Convert详细方法)
- eclipse中"Tomcat v8.0 Server at localhost failed to start"解决以及安装方法
- EasyDarwin Streaming Server对Task的调用方法
- SQL SERVER 不能修改表结构、列类型 解决方法
- Sql Server 强制大小写区分方法
- Sql Server 强制大小写区分方法
- Oracle与Sql Server差异点详解
- SQL SERVER 不能修改表结构、列类型 解决方法
- Sql Server 强制大小写区分方法
- 即时通讯工具:Output Messenger Server
- eclipse tomcat add时提示The Tomcat server configuration at ServersTomcat v6.0 Server at localhost-
- Could not load the Tomcat server configuration at /Servers/Tomcat v7.0 Server at localhost-config.
- 配置SQL Server 2005 远程连接(转)
- 问题解决:The connection to the server xxxxx:6443 was refused - did you specify the right host or port?
- 搭建 RabbitMQ Server 高可用集群
- Eclipse Server runtime设置里找不到apache tomcat的处理方法
- K8S 证书过期,报错:Unable to connect to the server: x509: certificate has expired or is not yet valid 解决方法