live555实现消息等待(sleep方法)
2013-01-04 11:41
176 查看
大家知道,live555为单线程执行,所以,如果执行了直接用系统函数::Sleep(Milliseconds)进行消息等待, 必然会导致消息接收函数得不到执行,即使使用另开的线程来进行消息的响应,对于live555线程本身也会导致所有工作停止,这并不是我们想要的在等待的同时可以进行其他工作的sleep方法,那么在live555中如何实现消息等待呢?
在live555中可以充分用到整个线程的等待函数env->taskScheduler().doEventLoop();进行消息等待,具体实现方式为:
1.我们首先定义一个变量fWatchVariable,赋初值为0
2.在执行等待的类中定义消息响应的函数,当消息到达时可以根据消息响应码或者响应报文赋值信号量,这里假设类名为 MyClass,响应函数名称为sleep()
3.在MyClass类函数中的消息等待部分加入等待3s
这里表示3s内doEventLoop()函数在原地循环,之后将执行sleep()函数,将fWatchVariable置为~0,如此将通过envir().taskScheduler().doEventLoop(&fWatchVariable);函数,如果需要长期等待,直到fWatchVariable = ~0的话,那么就去掉envir().taskScheduler().scheduleDelayedTask(3*1000000,(TaskFunc*)sleep,this);函数在等待的条件得到满足的时候将fWatchVariable赋值为~0即可。
在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即可。
相关文章推荐
- live555实现消息等待(sleep方法)
- vc自定义消息的发送与接收的方法实现
- 一种通过xmpp实现离线消息推送的方法及系统
- iOS开发中实现hook消息机制的方法探究
- Robotium API 翻译(四)——等待执行的方法sleep、waitFor .
- php 不等待返回的实现方法(异步调用)
- 关于VC++中,两种自定义消息的发送与接收的方法实现进行说明。
- VC++自定义消息的发送与接收的方法实现
- python实现简单socket程序在两台电脑之间传输消息的方法
- Android View系统源码分析(四)—— 各种消息监测的基本实现方法&View.dispatchTouchEvent()
- 三种等待方法,sleep,sched,timer
- 实现在vista和win7中使用管理员权限接收WM_DROPFILES(OnDropFiles())消息的方法
- MFC消息机制的具体实现方法
- 在VB中实现延时(等待)的几种方法
- 关于VC++中,两种自定义消息的发送与接收的方法实现进行说明。
- FMX有两种消息处理的实现方式,一种是用TMessageManager来实现自定义的消息,另外一种象TEdit中的实现,直接声明消息方法(firemonkey messaging)
- Robotium API 翻译(四)——等待执行的方法sleep、waitFor
- golang 实现延迟消息原理与方法
- 消息队列实现从一个进程向另一个进程发送一个数据块的方法
- 实现在vista和win7中使用管理员权限接收WM_DROPFILES(OnDropFiles())消息的方法(好像XP不支持这个函数)