找回密码
 加入
搜索
查看: 1471|回复: 4

两个循环造成的问题

[复制链接]
发表于 2008-10-22 12:29:36 | 显示全部楼层 |阅读模式
原码如下:
问题应该是出在倒数第7行那个Sleep( $b )  ,因为要隔一段时间备份指定文件,所以有个Sleep( $b )  在这里,但是就导致Case $msg =  $settingsitem、  Case $msg = $aboutitem两个运行起来出现延迟或不正常,请问如何解决?
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1)    ; Default tray menu items (Script Paused/Exit) will not be shown.

TraySetState()
TraySetToolTip( "万象2004数据库备份工具")

    Local $search = FileFindFirstFile("setting.ini")
$a = IniRead( @ScriptDir & "\setting.ini", "参数设置", "备份路径", "")
$b = IniRead( @ScriptDir & "\setting.ini", "参数设置", "备份间隔", "")
$c = IniRead( @ScriptDir & "\setting.ini", "参数设置", "备份数量", "")
$d = IniRead( @ScriptDir & "\setting.ini", "参数设置", "万象路径", "")

If $search = -1 Then
   MsgBox(64, "错误", "未找到配置文件,请检查运行目录下的setting.ini!"& @CRLF & _
        "请按以下格式建立setting.ini"& @CRLF & _
        "[参数设置]"& @CRLF & _
        "备份路径=D:\wxbak  ;;万象2004数据库文件备份路径"& @CRLF & _
        "万象路径=c:\wx2004  ;;万象2004目录"& @CRLF & _
        "备份间隔=300000     ;;此处单位为毫秒,1000毫秒=1秒"& @CRLF & _
        "备份数量=100        ;;备份文件夹数量,以防爆盘"& @CRLF & _
        "注意:等于号为半角,否则会运行不正常。")
Exit
EndIf

$settingsitem    = TrayCreateItem("显示配置详情")  
TrayCreateItem("")
$aboutitem        = TrayCreateItem("修改配置文件")
Dim $i
$i = 0
DirCreate( $a )

While 1
TraySetState()
    $msg = TrayGetMsg()
    Select
        Case $msg =  $settingsitem  ;运行不正常
            Msgbox(0,"配置详情:","备份路径:"& $a & @CRLF & _
                        "万象路径:"& $d & @CRLF & _
                        "备份间隔:"& $b & @CRLF & _
                        "备份数量:"& $c)
        Case $msg = $aboutitem     ;运行不正常
            ShellExecute ("setting.ini")
EndSelect
        DirCreate( $a &"\"& @YEAR&'-'&@MON&'-'&@MDAY&'-'&@HOUR&'点'&@MIN&'分'&@SEC&'秒')
        FileCopy( $d &"\2004mem.mdb",  $a &"\"& @YEAR&'-'&@MON&'-'&@MDAY&'-'&@HOUR&'点'&@MIN&'分'&@SEC&'秒', 1)
        FileCopy( $d &"\2004rec.mdb", $a &"\"& @YEAR&'-'&@MON&'-'&@MDAY&'-'&@HOUR&'点'&@MIN&'分'&@SEC&'秒', 1)
        FileCopy( $d &"\2004stck.mdb", $a &"\"& @YEAR&'-'&@MON&'-'&@MDAY&'-'&@HOUR&'点'&@MIN&'分'&@SEC&'秒', 1)
        Sleep( $b )   ;;由于存在这个暂停时间,所以造成$settingsitem、$setting两个按键点击后没有反映,有什么解决方法没有?
        $i = $i + 1
        If $i = $c Then
                DirRemove( $a, 1)
                $i = 0
                DirCreate( $a )
        EndIf
WEnd
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


[ 本帖最后由 charson 于 2008-11-12 09:04 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2008-10-22 12:48:58 | 显示全部楼层
你的意思是要一边在执行备份的时候, 前台的界面继续能响应? 那个要多线程
你的sleep是做什么用的呢? 既然你要间隔的话为什么还要让用户继续操作呢?
 楼主| 发表于 2008-10-22 15:33:07 | 显示全部楼层
是的,就是这个意思,后台执行备份,前台在任务栏会有个图标出来,可以查看设置,不然这个程序有没有运行也不知道。

SLEEP是备份间隔的时间,就是每隔$b,备份一次数据,不然的话一秒备份一次没多久就可能会爆盘。

[ 本帖最后由 charson 于 2008-10-22 15:35 编辑 ]
发表于 2008-10-23 13:36:18 | 显示全部楼层
用好continueloop,continuecase,ExitLoop
 楼主| 发表于 2008-11-12 09:03:49 | 显示全部楼层
搞定了,谢谢大家
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-10 09:57 , Processed in 0.073346 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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