QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1350|回复: 2

关于在miniGUI中使用定时器

[复制链接]
发表于 2005-11-1 15:50:09 | 显示全部楼层 |阅读模式
小弟现在使用miniGUI编程,想按一个按钮触发一个200毫秒的定时器,
执行函数roamfun()。使用setitimer函数,以及SIGALRM信号,程序如下。但我设的周期根本不起作用,系统以极快的频率在执行roamfun()。是不是miniGUI中已经用了该信号?
              struct itimerval tv;
              struct sigaction siga;
              tv.it_interval.tv_sec = 0;        
              tv.it_interval.tv_usec = 200;   
              tv.it_value.tv_sec = 0;
              tv.it_value.tv_usec = 200;
              siga.sa_handler = roamfun;
              siga.sa_flags  = 0;              
              memset (&siga.sa_mask, 0, sizeof(sigset_t));
              sigaction (SIGALRM, &siga, NULL);
              setitimer(ITIMER_REAL, &tv, NULL);
              while(1);

另外如果我用SIGPROF倒是可以,程序如下。但我不想用while(1)循环,我还想做别的事,请问该如何解决?

            sigaction (SIGPROF, &siga, NULL);
            setitimer(ITIMER_PROF, &tv, NULL);
            while(1);
发表于 2005-11-3 08:56:52 | 显示全部楼层
再开一个线程来做roamfun,起动以后用在roamfun里面用setitimer给自己发信号.
还有itimerval时间结构,1个是秒,1个是微秒,所以你要200毫秒是 200000 usec.SIGPROF是算进程有在运行的时间,SIGALRM是真实时间,所以你的 200 usec 在SIGPROF时有可能让你觉得有周期吧
回复

使用道具 举报

发表于 2005-11-4 09:45:28 | 显示全部楼层
200毫秒是在是很短的时间,如果你要测试 timer 是否生效,何不先用 5秒的间隔时间来测试呢?    
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-3 04:21 , Processed in 0.045012 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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