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即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术