charson 发表于 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 编辑 ]

gzken 发表于 2008-10-22 12:48:58

你的意思是要一边在执行备份的时候, 前台的界面继续能响应? 那个要多线程
你的sleep是做什么用的呢? 既然你要间隔的话为什么还要让用户继续操作呢?

charson 发表于 2008-10-22 15:33:07

是的,就是这个意思,后台执行备份,前台在任务栏会有个图标出来,可以查看设置,不然这个程序有没有运行也不知道。

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

[ 本帖最后由 charson 于 2008-10-22 15:35 编辑 ]

k1727 发表于 2008-10-23 13:36:18

用好continueloop,continuecase,ExitLoop

charson 发表于 2008-11-12 09:03:49

搞定了,谢谢大家
页: [1]
查看完整版本: 两个循环造成的问题