如何在perl里取得毫秒级的时间

如何在perl里取得毫秒级的时间,第1张

use Time::HiRes qw( gettimeofday );

my ($seconds, $microseconds) = gettimeofday;

秒 , 微秒, 计算一下就是毫秒了, perl模块中有不少与linux函数同名同功能的函数都可以直接用的,主要搜一下在哪个模块中,在perl的模块代码中搜,或者查看perldoc去查

楼上的想让你的程序变成悲剧linux下sleep函数的参数是秒为单位的休眠200秒

睡眠小于1秒用usleep,单位是毫秒

所以,楼上的程序把sleep改成usleep就可以 了

while(1)

{

/ any thing you want to do/

usleep(200);

}

另外我觉得你要说的好像是:希望while循环执行某些 *** 作,执行时间到200毫秒之后退出while循环?

最简单是用间隔定时器

你查下这几个函数:timer_create,timer_settime等。

时间设置比较精确,可以设置一段时间间隔,过了指定的时间之后,会给当前进程发送一个SIGALRM信号,你while循环的条件,可以在SIGALRM的信号处理函数里面修改,这样,到时间之后while就可以退出了

这样写:

//

static char flag=1

int main(void)

{

signal(SIGALRM, timer_handler);

/

申请并且设置间隔定时器的间隔

/

while(flag)

{

/循环内的 *** 作/

}

return 0;

}

void timer_handler(unsigned int signal)

{

flag=0;

}

1 RTC(Real Time Clock)

所有PC都有RTC 它和CPU和其他芯片独立。它在电脑关机之后还可以正常运行。RTC可以在IRQ8上产生周期性中断 频率在2Hz--8192HZ

Linux只是把RTC用来获取时间和日期 当然它允许进程通过对/dev/rtc设备来对它进行编程。Kernel通过0x70和0x71 I/O端口来访问RTC。

 

2 TSC(Time Stamp Counter)

80x86上的微处理器都有CLK输入针脚 从奔腾系列开始 微处理器支持一个计数器 每当一个时钟信号来的时候 计数器加1 可以通过汇编指令rdtsc来得到计数器的值。通过calibrate_tsc可以获得CPU的频率 它是通过计算大约5毫秒里tsc寄存器里面的增加值来确认的。或者可以通过cat /proc/cpuinfo来获取cpu频率。tsc可以提供比PIT更精确的时间度量。

 

3 PIT(Programmable internval timer)

除了RTC和TSC IBM兼容机提供了PIT。PIT类似微波炉的闹钟机制 当时间到的时候 提供铃声 PIT不是产生铃声 而是产生一种特殊中断 叫定时器中断或者时钟中断。它用来告诉内核一个间隔过去了。这个时间间隔也叫做一个滴答数。可以通过编译内核是选择内核频率来确定。如内核频率设为1000HZ,则时间间隔或滴答为1/1000=1微秒。滴答月短 定时精度更高 但是用户模式的时间更短 也就是说用户模式下程序执行会越慢。滴答的长度以纳秒形式存在tick_nsec变量里面。PIT通过8254的0x40--0x43端口来访问。它产生中断号为IRQ 0

下面是关于pIT里面的一些宏定义:

HZ:每秒中断数。

CLOCK_TICK_RATE:值是1,193,182 它是8254芯片内部振荡器频率。

LATCH:代表CLOCK_TICK_RATE和HZ的比率 被用来编程PIT。

setup_pit_timer()如下:

spin_lock_irqsave(&i8253_lock, flags);

outb_p(0x34,0x43);

udelay(10);

outb_p(LATCH & 0xff, 0x40);

udelay(10);

outb (LATCH >> 8, 0x40);

spin_unlock_irqrestore(&i8253_lock, flags);

 

 

4 CPU Local Timer

最近的80x86架构的微处理器上的local apic提供了cpu local timer他和pit区别在于它提供了one-shot和periodic中断。它可以使中断发送到特定cpu。one-shot中断常用在实时系统里面。

以上就是关于如何在perl里取得毫秒级的时间全部的内容,包括:如何在perl里取得毫秒级的时间、在linux环境下c语言中如何让while循环执行固定的时间如200毫秒、linux下的几种时钟和定时器机制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9508109.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存