夜猫猫 发表于 2012-7-10 15:23:15

_DateAdd 在一个周期运行程序问题(已解决)

本帖最后由 夜猫猫 于 2012-7-10 20:51 编辑

郁闷!居然把帖子发到无意义贴里去了

预想效果:使用_DateAdd获得预定时间,当时间到时执行程序,执行完程序后,保持在线等待下次执行.
我使用当前时间跟预定时间比较,匹配则运行程序.不匹配等待

这里有个差不多的.5楼三笑的代码
http://www.autoitx.com/forum.php?mod=viewthread&tid=18089&highlight=%D6%DC%C6%DA
但是使用注册AdlibRegister函数,避免使用 ...Wait(), MsgBox(), InputBox() 等阻断型函数,所以不能使用.
搞一头雾..好象每次获取时间都没法比较...预定时间永远跟当前时间对不上,,求帮忙...谢谢

代码如下:
#include <Date.au3>
$sNewDate = _DateAdd('n', 1, _NowCalc())
$nowdate = _NowCalc()
;MsgBox(4096, "", "1分钟后时间是:" & $sNewDate)

While 1
If $nowdate = $sNewDate Then
        MsgBox(0,"","运行程序")
EndIf
Sleep(1000)
WEnd

user3000 发表于 2012-7-10 15:45:15

你这是刚给用现在的时间加1分钟后,马上跟现在的时间比较, 这哪里能相等?
应该在循环里i不断更新'现在的时间'来比较:

#include <Date.au3>
$sNewDate = _DateAdd('n', 1, _NowCalc())
While 1
If $sNewDate = _NowCalc() Then ExitLoop
Sleep(100)
WEnd
MsgBox(0,"时间到","运行程序")

ashfinal 发表于 2012-7-10 16:05:00

本帖最后由 ashfinal 于 2012-7-10 16:09 编辑


#include <Date.au3>
$sNewDate = _DateAdd('n', 1, _NowCalc())

;MsgBox(4096, "", "1分钟后时间是:" & $sNewDate)

While 1
$nowdate = _NowCalc();原第三行移到这
If $nowdate = $sNewDate Then
      MsgBox(0,"","运行程序")
EndIf
Sleep(1000)
WEnd


原例上改一句你就知道错哪了 虽然你指定 $nowdate 为当前时间,实际上并没更新。它指向的是过去的固定时间

夜猫猫 发表于 2012-7-10 16:15:43

本帖最后由 夜猫猫 于 2012-7-10 16:24 编辑

谢谢ashfinal555.....测试几下才发现ashfinal改的不是我想要的效果.第一次会执行.并且不会退出.但不会执行第二次,第三次.
我需要循环执行.就是每一分钟.或者一小时.一天执行.比如现在时间2点.预定6小时后执行一次.执行完后等待.再过6小时后再执行一次

ashfinal 发表于 2012-7-10 18:20:14

本帖最后由 ashfinal 于 2012-7-10 18:22 编辑

直接用sleep不更好?
While 1
sleep(60*1000)
MsgBox(0,"","运行程序")
WEnd

你原来的也能改改

#include <Date.au3>
$sNewDate = _DateAdd('n', 1, _NowCalc())
;MsgBox(4096, "", "1分钟后时间是:" & $sNewDate)
While 1
$nowdate = _NowCalc();原第三行移到这
If $nowdate = $sNewDate Then
      MsgBox(0,"","运行程序")
      $sNewDate = _DateAdd('n', 1, _NowCalc());复制原第二行到此,重新定义$sNewDate
EndIf
Sleep(1000)
WEnd

夜猫猫 发表于 2012-7-10 20:51:21

SLEEP休眠是可以用.但是如果是分钟,小时.那该添多大数?


谢谢....重定义后可以正常使用了..
页: [1]
查看完整版本: _DateAdd 在一个周期运行程序问题(已解决)