openrtmfp源码阅读1
日期:2014-10-22 10:08:35
最后更新日期:2014-11-24 21:04:46

add套接字后,会判断线程是否启动,若没有启动,则startable::start启动它。接着调用socketmanager::run方法。run方法里面push要监听的事件,这里会阻塞一段时间,唤醒后,会调用task::waithandle方法。task::waithandle方法里面会_handler.waitHandle(*this)。task的this指针指向的是MainSockets对象。所有的这些调用都是在MainSockets里面可见的。MainSockets对象既是Task类型,又是TaskHandler类型。TaskHandler里面的waitHandle(Task),传给requestHandle(),该函数为虚函数,父类MainSockets实现了该函数,直接调用giveHandle函数。giveHandle函数里面调用了_pTask指针的handle函数。所以兜一个圈子后,调用socketmanager的handler方法处理socket的onread方法。
PS:这里的确很绕,为什么要兜这么一圈子,为啥不直接,阻塞唤醒后,直接执行hander即可。