QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1131|回复: 5

求教setitimer问题

[复制链接]
发表于 2004-3-27 10:18:39 | 显示全部楼层 |阅读模式
看看这断test程序
#include<stdio.h>
#include<unistd.h>
#include&lt;stdlib.h&gt;
#include&lt;sys/time.h&gt;
#include&lt;signal.h&gt;
void ini_time(){
    struct itimerval value;
   
    value.it_value.tv_sec=0;
    value.it_value.tv_usec=100;
    value.it_interval=value.it_value;
    setitimer(ITIMER_REAL,&amp;value,NULL);
}
void Draw(int);
int Time=5;
int main()
{
    signal(SIGALRM,Draw);
    ini_time();
    int K=0;
    while(1){
        printf("%d\n",K);
        K++;
        if(Time&lt;=0)
           break;
    }
}

void Draw(int)
{
    printf("DrawDrawDrawDraw\n");
    Time--;
}

为什么几次运行 的结果都不一样
这个应该就是隔一个固定的时间发signal到Draw中
但是输出没此都不一样
还有 为什么有的数字会连续输出两次

高手指教
发表于 2004-3-27 17:38:44 | 显示全部楼层
1.不要认为定时功能很准。它不是实时系统,当你定义的时间到了,这个信号不是马上能发出去的,发出去也不是马上能处理的(这个马上是针对你的printf语句的,你一点都不等待就打印,每微秒要打多少次啊!)
2。你看到的数字不一样,因为你打印的太快(想想你的处理器有多快吧),从K为0 开始算,到第一个信号产生,这中间K会加多少,谁说得清?(编程测试一下这个问题吧)
3.重复的问题。我也不明白。不过你对信号的控制太粗放了,在你的信号处理期间系统会发生许多事,比如它也会发许多信号,你不对它们进行处理,系统的行为可能不定。看man signal.
4.现在推荐使用sigaction,signal是不可靠的实现。
5.不知用setitimer设置了SIGALRM要不要关,但我知道用alarm()设置的信号要用alarm(0)关掉。
6.我对信号完全是一知半解,只是见无高手作答,故抛砖引玉,不对之处,万勿嘲笑。
回复

使用道具 举报

 楼主| 发表于 2004-3-27 17:58:48 | 显示全部楼层
谢谢回答
我这个方面也是刚刚接触
我现在想要一个严格的定时
不知道怎么样可疑做到
大牛人给我想想办法
回复

使用道具 举报

发表于 2004-3-28 15:00:48 | 显示全部楼层
支持楼上那位的请求,如果有哪位大牛人从此路过,希望给点指点。
虽然我不是牛人,不过我自己有点看法。据我所知linux内核是不能抢占的(以后的版本就不知道了,听说Linux Kernel Development的作者开发了抢占式内核),所以要内核让出资源是不可能的,除非它自愿,这样就大多数类UNIX系统没有严格意义上的实时性。linux也如此,即使它有内核抢占实现,也不一定可能满足工业实时应用(针对普通linux内核而言,专用的实时linux内核实现另当别论)。所以现在有许多的机构在研究linux并希望做出较好的实现系统。当然,也有其它很好的并不基于linux的实时系统。
所以关键还是看你的定时要求有多高。
回复

使用道具 举报

发表于 2004-3-28 15:07:47 | 显示全部楼层
设置进牛的优先级

在linux中保留有用于实时的优先级的 (可以用在线程中)

不过我没有使用过

另外 如果真想开发实时的东西
那你还是使用实时操作系统 而不必使用桌面系统 桌面系统为了满足性能 不会变成实时
回复

使用道具 举报

发表于 2004-3-29 09:39:34 | 显示全部楼层
实际上如果是楼主那样的程序 即使在行业意义的“实时系统”上也做不到每次都相同的 因为实时系统的重要含义是尽快响应和可估计的最大中断时间 只能做到保证切换的最大用时而无法保证切换的每次用时
linux中的“实时优先级”我估计应该是和win下面的实时优先级一个概念:只保证尽快响应而无法保证中断时间的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 17:09 , Processed in 0.048339 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表