QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 837|回复: 5

定时器的问题。

[复制链接]
发表于 2004-4-29 17:44:20 | 显示全部楼层 |阅读模式
alarm的问题!
#include <sys/times.h>
#include <sys/signal.h>
#include <stdio.h>

void test1()
{
printf("test1\r\n");
}
void test2()
{
printf("test2\r\n");
}
void main()
{
signal(SIGALRM, test1);
alarm(1);
sleep(1000);
signal (SIGALRM,test2);
}
这个函数只输出一个test1后就结束了,为什么呢.
sleep(100)有100秒的时间,在这个期间,可以执行多次test1(),为什么之后一次输出呢?
发表于 2004-4-29 18:50:38 | 显示全部楼层
没有编过,不过好像sleep里面的是毫秒吧,我也不知道,错了你就当没有看见吧,如果是毫秒的话,sleep(1000)只有一秒的时间
回复

使用道具 举报

发表于 2004-4-29 19:33:18 | 显示全部楼层

Re: 定时器的问题。

[quote:6c0f021bb7="whutxuan"]alarm的问题!
#include <sys/times.h>
#include <sys/signal.h>
#include <stdio.h>

void test1()
{
printf("test1\r\n");
}
void test2()
{
printf("test2\r\n");
}
void main()
{
signal(SIGALRM, test1);
alarm(1);
sleep(1000);
signal (SIGALRM,test2);
}
这个函数只输出一个test1后就结束了,为什么呢.
sleep(100)有100秒的时间,在这个期间,可以执行多次test1(),为什么之后一次输出呢?[/quote]

alarm(1); 设置定时器
然后sleep(1000);
一秒后进程收到SIGALRM信号,sleep返回。
signal (SIGALRM,test2);设置信号处理器后没有时间再等到下一个SIGALRM进程就会结束
所以只有一个输出
回复

使用道具 举报

 楼主| 发表于 2004-4-30 01:15:36 | 显示全部楼层
楼上的意思是说sleep(100)会因为收到alarm信号而返回.
我测试过了,就是sleep(100000),也只有一个输出的.
回复

使用道具 举报

发表于 2004-6-7 22:12:32 | 显示全部楼层
sleep()函数是用alarm()函数实现的,你先调用alarm()后,再调用sleep(),那么在sleep()里的alarm()函数就会取消掉你前面的alarm定时。
所以,千万不要同时使用sleep和alarm函数,否则有潜在冲突。
回复

使用道具 举报

发表于 2004-6-7 22:31:47 | 显示全部楼层
参见以下示例,前5次定时做test1,后5次定时做test2
[code:1]
#include <time.h>
#include <signal.h>
#include <stdio.h>

static mycount = 0;

void test1()
{
        signal(SIGALRM, test1);
        printf("test1\r\n");
        ++mycount;
        alarm(1);
}
void test2()
{       
        signal(SIGALRM, test2);       
        printf("test2\r\n");
        ++mycount;
        alarm(1);
}
int main()
{
        signal(SIGALRM, test1);
        alarm(1);
        do{}while(mycount<5);
       
        //sleep(1000);
        signal (SIGALRM,test2);
        do{}while(mycount<10);
        return 0;
}
[/code:1]
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-8 04:37 , Processed in 0.046406 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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