两个循环造成的问题
原码如下:问题应该是出在倒数第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 编辑 ] 你的意思是要一边在执行备份的时候, 前台的界面继续能响应? 那个要多线程
你的sleep是做什么用的呢? 既然你要间隔的话为什么还要让用户继续操作呢? 是的,就是这个意思,后台执行备份,前台在任务栏会有个图标出来,可以查看设置,不然这个程序有没有运行也不知道。
SLEEP是备份间隔的时间,就是每隔$b,备份一次数据,不然的话一秒备份一次没多久就可能会爆盘。
[ 本帖最后由 charson 于 2008-10-22 15:35 编辑 ] 用好continueloop,continuecase,ExitLoop 搞定了,谢谢大家
页:
[1]