仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 643|回复: 8
打印 上一主题 下一主题

[其他Linux] linux教程之怎样在Linux下完成准时器

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:26:10 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果你只是想应付一下操作系统的课程,劝你最好别学,或者说不要指望能用的怎么样。
在Linux完成一个准时器,不像Win32下那样直不雅。在Win32挪用SetTimer就好了,在Linux下则没有响应函数能够间接挪用。准时器作为一个经常使用的功效,在Linux固然也有响应完成。上面我们看看几种经常使用的办法。
要完成准时器功效,最土的举措完成莫过于用sleep/usleep来完成了。固然,它会堵塞以后线程,除处置准时功效外,甚么活也干不了。固然要办理这个成绩不难,创立一个独自的线程来卖力准时器,别的线程卖力一般的义务就好了。
要完成准时器功效,最复杂的举措就是ALarm旌旗灯号。这类办法复杂,也响应的缺点:用旌旗灯号完成效力较低;最小精度为1秒,没法完成高精度的界说器。复杂示例:
#include<stdio.h>
#include<signal.h>
staticvoidtimer(intsig){
if(sig==SIGALRM){
printf("timer
");
}
return;
}
intmain(intargc,char*argv[]){
signal(SIGALRM,timer);
alarm(1);
getchar();
return0;
}

(setitimer和alarm有相似的功效,也是经由过程旌旗灯号来完成)
最文雅的办法是利用RTC机制。使用select函数,你能够用单线程完成准时器,同时还能够处置别的义务。复杂示例:
#include<stdio.h>
#include<linux/rtc.h>
#include<sys/ioctl.h>
#include<sys/time.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
intmain(intargc,char*argv[]){
unsignedlongi=0;
unsignedlongdata=0;
intretval=0;
intfd=open("/dev/rtc",O_RDONLY);
if(fd<0){
perror("open");
exit(errno);
}
/*Setthefreqas4Hz*/
if(ioctl(fd,RTC_IRQP_SET,4)<0){
perror("ioctl(RTC_IRQP_SET)");
close(fd);
exit(errno);
}
/*Setthefreqas4Hz*/
if(ioctl(fd,RTC_IRQP_SET,4)<0){
perror("ioctl(RTC_IRQP_SET)");
close(fd);
exit(errno);
}
/*Enableperiodicinterrupts*/
if(ioctl(fd,RTC_PIE_ON,0)<0){
perror("ioctl(RTC_PIE_ON)");
close(fd);
exit(errno);
}
for(i=0;i<100;i++){
if(read(fd,&data,sizeof(unsignedlong))<0){
perror("read");
close(fd);
exit(errno);
}
printf("timer
");
}
/*Disableperiodicinterrupts*/
ioctl(fd,RTC_PIE_OFF,0);
close(fd);
return0;
}
</p>
当你经过一段时间的学习后就应该扩充自己的知识,多学习linux命令,但是不要在初学阶段就系统的学习linux命令。
admin 该用户已被删除
9#
发表于 2015-3-24 18:58:21 | 只看该作者
如果上面的措施没有解决问题,此时你就需要Linux社区的帮助了。 Linux的使用者一般都是专业人士,他们有着很好的电脑背景且愿意协助他人。
小魔女 该用户已被删除
8#
发表于 2015-3-17 17:11:07 | 只看该作者
永中office 2004增强版安装只需要默认安装即可使用并操作大多与win系统雷同,打印机的配置和管理,记录光盘等。
谁可相欹 该用户已被删除
7#
发表于 2015-3-11 00:50:36 | 只看该作者
Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-1 21:53:03 | 只看该作者
选择一些适于初学者的Linux社区。
爱飞 该用户已被删除
5#
发表于 2015-2-11 04:40:28 | 只看该作者
得到到草率的回答或者根本得不到任何Linux答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。
再见西城 该用户已被删除
地板
发表于 2015-2-5 03:54:50 | 只看该作者
让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。?
老尸 该用户已被删除
板凳
发表于 2015-1-27 05:05:21 | 只看该作者
选择交流平台,如QQ群,网站论坛等。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-18 14:36:33 | 只看该作者
掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 13:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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