- 论坛徽章:
- 0
|
原帖由 flw 于 2009-12-2 13:22 发表 ![]()
问题不明确,给你几个关键字你自己搜索好了
time
select
alarm
Time::HiRes
POE
我的需求其实很简单,就是在windows下,我的程序可以隔几秒、几微妙、甚至几毫秒、几小时执行一个动作或语句。
根据我对你提的几个函数的分析,似乎Time::Hires可以用,这个模块里的usleep可以用,但是ualarm不能在windows下正常用。
下面是我看上面几个函数、模块的一点总结笔记和遗留问题,麻烦大家审审,解答下遗留问题,和指正下错误的地方?
Time()函数:
这个函数返回自“纪元”以来的没有润秒的秒数,是用于获得时间的吧?
Alarm()函数:
每次只能有一个定时器处于活跃状态。每次调用都关闭前面一个定时器,并且如果你给的 EXPR 是 0,那么就能取消所有前面设置的定时器而又不会启动一个新的定时器。它的返回值是前面一个定时器里剩下的时间的数量。
print "Answer me within one minute, or die: ";
alarm(60); # 一分钟后终止程序
$answer = ;
$timeleft = alarm(0); # 清除警报
print "You had $timeleft seconds remaining\n";
把 alarm 和 sleep 混合在一起使用通常是一个错误,因为许多系统使用 alarm(2) 系统调用机制实现 sleep(3)。在老一些的系统上,流逝的时间可能比你声明的少上最多一秒钟,这是由于秒计数的方式造成的。另外,一台繁忙的系统可能无法立即运行你的进程。参阅第十六章获取关于信号处理的信息。
如果你需要比一秒的颗粒度更细的间隔,那么你可能要使用 syscall 函数访问 setitimer(2),前提是你的系统支持这个系统调用。CPAN 模块,Timer::HiRes,也提供了用于这个目的的函数。
Alarm()函数不能用在windows操作系统下!!?
Select()函数
select (RBITS, WBITS, EBITS, TIMEOUT),是用的最后一个TIMEOUT参数控制时间的吧,这个函数里面的任何一个参数都可以undef,如果TIMEOUT不是undef就是以秒计的吧,我想让它也可以小是毫秒、微妙、大是小时的单位。
Time::HiRes
Time::Hires里面的ualarm()函数似乎也不能在Win下正常用。还是说像CPAN上说的我的系统上没有ualarm函数,那就不能用。
我们的win系统上似乎是没有吧。
POE
POE似乎没有时间控制吧,怎么控制? |
|