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

关于alarm()函数的问题,高手进

    来源: 互联网  发布时间:2015-08-30

    本文导语:  问题1: Using only a single timer (either alarm or the higher precision setitimer) provide a set of functions that allows a process to set any number of timers. 问题2:  重新编写sleep函数,使之避免消除对以前闹钟信号的影响. ...

问题1:
Using only a single timer (either alarm or the higher precision setitimer) provide a set of functions that allows a process to set any number of timers.
问题2:
 重新编写sleep函数,使之避免消除对以前闹钟信号的影响.

|
这什么意思?是不是要code? 满足你。
int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue)
{
        register unsigned long i, j;
        int k;

        i = tvtojiffies(&value->it_interval);
        j = tvtojiffies(&value->it_value);
        if (ovalue && (k = do_getitimer(which, ovalue)) real_timer);
                        current->it_real_value = j;
                        current->it_real_incr = i;
                        if (!j)
                                break;
                        if (j > (unsigned long) LONG_MAX)
                                j = LONG_MAX;
                        i = j + jiffies;
                        current->real_timer.expires = i;
                        add_timer(¤t->real_timer);
                        break;
                case ITIMER_VIRTUAL:
                        if (j)
                                j++;
                        current->it_virt_value = j;
                        current->it_virt_incr = i;
                        break;
                case ITIMER_PROF:
                        if (j)
                                j++;
                        current->it_prof_value = j;
                        current->it_prof_incr = i;
                        break;
                default:
                        return -EINVAL;
        }
        return 0;
}

/* SMP: Again, only we play with our itimers, and signals are SMP safe
 *      now so that is not an issue at all anymore.
 */
asmlinkage long sys_setitimer(int which, struct itimerval *value,
                              struct itimerval *ovalue)
{
        struct itimerval set_buffer, get_buffer;
        int error;

        if (value) {
                if(copy_from_user(&set_buffer, value, sizeof(set_buffer)))
                        return -EFAULT;
        } else
                memset((char *) &set_buffer, 0, sizeof(set_buffer));

        error = do_setitimer(which, &set_buffer, ovalue ? &get_buffer : 0);
        if (error || !ovalue)
                return error;

        if (copy_to_user(ovalue, &get_buffer, sizeof(get_buffer)))
                return -EFAULT;
        return 0;
}

|
不写程序
唯一一个计时器设定为最小时间间隔T
基本思路是使用一个timer链表,每个节点保存计时结果
每个T时间到,就给每一个节点的计数减一,如果出现0的,就必须
处理一次定时事件,然后删除这个节点

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐
  • 请教一个alarm(0)的问题
  • alarm() 和 signal()的问题
  • Alarm定时小问题
  • alarm() signal()的问题??
  • 关于Linux下alarm信号的问题
  • alarm的问题
  • 关于accept阻塞和alarm闹钟问题
  • 紧急求助:关于线程中接收alarm信号的问题
  • 关于循环触发alarm调用heandler的问题,谢谢指点,解决立马结贴!
  • larm 时间已经过期(alarm<jiffies)是什么意思?
  • linux 下多线程 每个线程能否使用alarm来处理,信号是否会乱呢?
  • 简易定时闹铃工具 Alarm Clock
  • 用alarm和pause来实现sleep:分不够可在加
  • 这个程序为什么 alarm 不起作用?
  • 我想找到alarm.c这个文件 但不知道怎么查找
  • 需要几分钟或半个小时或一个小时执行,定时用alarm还是sleep好?
  • aupe中关于alarm的困惑
  • socket tcp 关于 alarm() 和 recv() ?
  • 如何用alarm实现每隔一段时间显示不同的内容?
  • alarm中关闭了socketfd,但是recvfrom无法知道
  • 请问为什么alarm失去作用?
  • alarm发闹铃信号,但只会执行一次.
  • 为什么msgrcv和 ALARM不能共同调用?急在线等。。。
  • 关于 signal alarm pause
  • 为什么我在alarm信号里设置信号屏蔽就不好用呢,求解答
  • 如何用系统调用实现每秒钟显示一次系统时钟,可以用getitimer,setitimer,alarm?
  • 定时器编程,alarm clock
  • alarm的响应线程是谁?


  • 站内导航:


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

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

    浙ICP备11055608号-3