easydarwin epoll过程


RTSPSessionInterface : public QTSSDictionary, public Task
RTSPSession : public RTSPSessionInterface

TCPSocket : public Socket : public EventContext
//tcp监听
TCPListenerSocket::ProcessEvent
    //make rtspsession/task
    theTask = this->GetSessionTask(&theSocket);
    theSocket->RequestEvent(EV_RE);
         //register epoll
         addEpollEvent(&fEventReq, theMask) != 0)
         fRef.Set(fUniqueIDStr, this);
         //we can get EventContent by fref
         fEventThread->fRefTable.Register(&fRef);//通过字符串识别EventContent

     theSocket->SetTask(theTask)
//EventContent 包含task,task包含socket
//事件处理线程

Socket::StartThread();  //RunServer.cpp

void EventThread::Entry()
   int theReturnValue = epoll_waitevent(&theCurrentEvent, NULL);
    OSRef* ref = fRefTable.Resolve(&idStr);
    EventContext* theContext = (EventContext*)ref->GetObject();//取得EventContent
    theContext->ProcessEvent(theCurrentEvent.er_eventbits);
    fTask->Signal(Task::kReadEvent);//
        //选择一个线程处理task,easydarwin目前采取简单的分配,把task放到线程池里处理
         TaskThreadPool::sTaskThreadArray[theThreadIndex]->fTaskQueue.EnQueue(&fTaskQueueElem);
           
//任务处理线程,会有n个
TaskThread::Entry()
   theTask = this->WaitForTask();
   theTimeout = theTask->Run();
   rtspsession.run() //rtspsession继承task,task处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值