当前位置:  技术问答>linux和unix

关于延时函数函数INIT_WORK

    来源: 互联网  发布时间:2016-02-10

    本文导语:  书上说函数INIT_WORK(struct work_struct *work, void (*function)(void *), void *data)初始化一个工作队列,函数的第二个参数是指"一段时间"后调用的函数,那么这个被调用的函数什么时间被调用呢,这个延迟时间是一个确定值还是...

书上说函数INIT_WORK(struct work_struct *work, void (*function)(void *), void *data)初始化一个工作队列,函数的第二个参数是指"一段时间"后调用的函数,那么这个被调用的函数什么时间被调用呢,这个延迟时间是一个确定值还是一个大概的值呢?当被延时的函数被调用时,会不会出现两个线程?因为原先的程序也在运行.或者原先的程序在执行INIT_WORK就被阻塞,直到延时函数被调用后才继续运行?

|
"第一个问题,我想问的是那个延迟时间是编程者人为的设置了某个数值,还是系统自己选择了一个时间.我的问题不在于系统是否精确的延时了."
a.系统会将在处理工作者线程(管理work队列执行的内核线程)占用CUP时立即执行
b.如果设定了schedule_delayed_work(&work,delay);函数delay是时钟节拍,那么就再
  你设定后制定的时间执行,如过想回复a状态,就调用cancel_delayed_work(&work);取消

 
“第二个问题我想问的是在单cpu上那个程序是否会出现两个线程,一个是延时调用的函数,另一个是原先的程序 ”
不是会出现,是一定会出现,首先“处理工作者线程(管理work队列执行的内核线程)”假设是event/0(0表是0号cpu),内核初始化就住内核,再个就是你申请work的线程;“一个是延时调用的函数”而是由event/0处理时间和定时器,你的线程只负责与event/0通讯,其它不管。

“因为原先的程序也在运行.或者原先的程序在执行INIT_WORK就被阻塞,直到延时函数被调用后才继续运行?” 

不好意思,上面不对
看理解你的意思,如要等时间完成后,那么有void flush_scheduled_work(void)会一直等待,直到work队列全部执行完后。
如像你上面说的,INIT_WORK阻塞不阻塞跟event/0没有关系,反正是队列执行.


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 通讯延时
  • 同步延时问题
  • pipe的性能如何?主要指的是延时...
  • linux下如何实现微秒级的精确延时,谢谢了
  • java 怎样延时?
  • 如何修改RedHat8启动延时及默认启动的系统?
  • 求教如何针对某台机器稳定的增加网络延时?
  • 需要精度达到1~2ms的延时,请大家帮忙
  • STLinux ping 延时偏大
  • 请教高手linux编程的问题:如何实现毫秒级的延时?
  • 请问linux内核中怎么让进程延时一段时间执行
  • 请问怎样在程序中的一个位置做一个延时功能呀?
  • 怎样用jsp实现页面的延时和重导向?
  • 在SCO OperServer 5.0.5下如何调整端口的重用延时?
  • 关于jsp文件的延时问题
  • 关于毫秒级延时和sizeof的问题
  • 在Unix下C编程,延时效果怎么做?
  • pthread_cond_signal唤醒有延时?
  • C#实现延时并自动关闭MessageBox的方法
  • WinForm的延时加载控件概述


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3