当然可以写到一起,我分出来写那个只是个演示功能,如果这样你还不明白的话我也没办法了。如果求思路可以,求代码的话~爱莫能助了。 蛋蛋的位运算确实厉害,贴出来分享一下
Dim $n = @MIN
Dim $kg = 1
While 1
If BitOR(BitAND(@MIN = $n, $kg = 1), BitAND(BitOR(@MIN = $n + 30, @MIN = $n - 30), $kg = 0)) Then
$kg = Not $kg
ConsoleWrite("=" & @CR)
EndIf
WEnd 回复 11# haijie1223
最后的func可以合并到上一个func吧,另外
ConsoleWrite("=" & @CR )无法理解这一行代码,能解释一下吗、?
试了下你的代码,while一直循环执行,在测试中可以看到的,而不是间隔30分钟执行一次呢。 回复 13# zym3138
While 1
sleep(2000)
IfProcessExists("foobar2000.exe") Then ProcessClose("foobar2000.exe");代为sygate
WEnd
回复 14# haijie1223
放到前面也不行啊,关闭不了foobar2000呢。都不执行func内的代码。 回复 19# netegg
用sleep是可行的,可帮助里面说此延迟并不准确,有没有准确的定时方法呢。 回复 21# zym3138
看你需要的精度,秒级的用不到那么精确,sleep够用了 算了吧,在没有得到更好的方法下,我也只能用sleep将就了了。 如楼上各位所说,adlib不建议在等待时间过长的情况下使用,我上面之所以给出是因为不知道楼主的代码到底是什么,只好如此 本帖最后由 netegg 于 2013-1-18 11:15 编辑
回复 23# zym3138
这话说的,更精确的方法当然有,但是对你这个题目没必要,100微秒(0.1毫秒)的精确度,楼主觉得有用吗?
另外可以创建semiphore并行对象处理,或者直接用pdh走性能计数的方法计时 ;只在30分钟后运行一次
$begin = TimerInit()
$open = 1
While1
If TimerDiff($begin) > 30*60*1000 And $open = 1 Then
;~........
$open = 0
$begin = TimerInit()
endIf
Sleep(10)
WEnd
;每隔30分钟后运行一次
$begin = TimerInit()
While1
If TimerDiff($begin) > 30*60*1000 Then ;30(分钟)*60(秒)*1000(毫秒)
;~........
$begin = TimerInit()
endIf
Sleep(10)
WEnd
回复 26# sanmoking
谢谢你提供的TimerInit()函数,测试可行。
页:
1
[2]