zoukankan      html  css  js  c++  java
  • live555实现消息等待(sleep方法)

          大家知道,live555为单线程执行,所以,如果执行了直接用系统函数::Sleep(Milliseconds)进行消息等待, 必然会导致消息接收函数得不到执行,即使使用另开的线程来进行消息的响应,对于live555线程本身也会导致所有工作停止,这并不是我们想要的在等待的同时可以进行其他工作的sleep方法,那么在live555中如何实现消息等待呢?

         在live555中可以充分用到整个线程的等待函数env->taskScheduler().doEventLoop();进行消息等待,具体实现方式为:

    1.我们首先定义一个变量fWatchVariable,赋初值为0

    fWatchVariable = 0;

    2.在执行等待的类中定义消息响应的函数,当消息到达时可以根据消息响应码或者响应报文赋值信号量,这里假设类名为 MyClass,响应函数名称为sleep()

    void MyClass::sleep(void* clientSession)
    {
    	MyClass* obj= (MyClass*)clientSession;
    	obj->fWatchVariable = ~0;
    }

    3.在MyClass类函数中的消息等待部分加入等待3s

    fWatchVariable = 0;
    envir().taskScheduler().scheduleDelayedTask(3*1000000,(TaskFunc*)sleep,this);
    envir().taskScheduler().doEventLoop(&fWatchVariable);
    

    这里表示3s内doEventLoop()函数在原地循环,之后将执行sleep()函数,将fWatchVariable置为~0,如此将通过envir().taskScheduler().doEventLoop(&fWatchVariable);函数,如果需要长期等待,直到fWatchVariable = ~0的话,那么就去掉envir().taskScheduler().scheduleDelayedTask(3*1000000,(TaskFunc*)sleep,this);函数在等待的条件得到满足的时候将fWatchVariable赋值为~0即可。

  • 相关阅读:
    LoaRunner性能测试系统学习教程:日志文件分析(8)
    LoaRunner性能测试系统学习教程:MPM相关参数(7)
    LoaRunner性能测试系统学习教程:MPM调优(6)
    响应器
    分页器
    权限组件、频率组件
    drf视图组件、认证组件
    drf序列化组件
    RESTful
    IO操作、PIL使用、Django的admin操作
  • 原文地址:https://www.cnblogs.com/babosa/p/5904728.html
Copyright © 2011-2022 走看看