对mdelay()和msleep()的理解

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/combattre/article/details/50975606

在Liunx 驱动开发过程中,经常要用到延迟函数:msleep/mdelay/udelay,但是很多人对于这些不是很在意,平时开发的时候用起来也是比较随意(在我没搞清之前也是这样,哈哈)

msleep和mdelay同样都有延迟的效果,但是肯定也会有些差别的,否则就不要多此一举了。

 

mdelay是忙等待函数,在延迟过程中无法运行其他任务,是占用cpu资源的。它的延迟的时间是准确的

msleep是休眠函数,它不涉及忙等待。只是把线程挂起,不占用cpu资源的它的延迟的时间是不准确的msleep实现是基于调度,延时期间调用schedule_timeout产生调度,待时间到期后继续运行,该函数实现在kernel/timer.c中。你想延迟10ms,使用msleep(10),但是实际系统不止延迟了10ms。


在开发过程中,10ms以下对时序要求比较高的使用mdelay(),100ms以上的延时最好还是用msleep,因为使用mdelay()会占用cpu资源,可能会对linux的多任务系统运行还是有一定影响,所以这一点需要注意。

展开阅读全文

理解的对么?

01-05

directshow播放顺序rn我在网上看了些帖子,但是和我理解的存在点疑问,来这里问问。rn我的理解是这样:rn1)rnrnhr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, rn IID_IGraphBuilder, (void **)&pGraph);rn//hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,rn//IID_IMediaControl, (void **)&pMC);rn//以上两句只是通过不同的方式来来获取FilterGraph 并且 可以通过IID_IGraphBuilder IID_IMediaControl 互相获取对方!也可以获取其他借口只是要遵循下面的规则:rnrnrnhr = pMC->QueryInterface(IID_IGraphBuilder, (void **)&pGraph);rnhr = pGraph->RenderFile(lpszMovie, NULL);//是不是这句要传给filer graph视频 然后只用这句调用完成之后才会 有真正的内容在filer graph(类似于实例化一个对象)rn//然后才可以通过pGraph 获取其他借口 ,对视频的控制才有效果rn//总结是就是pGraph->RenderFile 必须先于pGraph->QueryInterface(IID_IMediaSeeking, (void **)&pMediaSeekiking);rn//pGraph->QueryInterface(IID_IMediaPosition, (void **)&pMediaPos);rn//pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVideoWnd);rn//pGraph->QueryInterface(IID_IBasicVideo, (void **)&pBasicVideo);rn//调用才会有用,打破了这个顺序就会出错。rnrnrnpGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);rnpGraph->QueryInterface(IID_IMediaEventEx, (void **)&pEvent);//pMC->QueryInterface(IID_IMediaEventEx, (void **)&pME); 这两句是一样的rnpGraph->QueryInterface(IID_IMediaSeeking, (void **)&pMediaSeekiking);rnpGraph->QueryInterface(IID_IMediaPosition, (void **)&pMediaPos);rnpGraph->QueryInterface(IID_IVideoWindow, (void **)&pVideoWnd);rnpGraph->QueryInterface(IID_IBasicVideo, (void **)&pBasicVideo);rnrnhr = pControl->Run();rnhr = pEvent->WaitForCompletion(INFINITE, &evCode);//调用这这句会发生阻塞,等待视频播放完成rn//如果我这时候调用pMediaPos->put_CurrentPosition();的会产生中断,处理这个设置当前视频的位置rnrnrnrn忘指正!谢谢rn 论坛

没有更多推荐了,返回首页