函数调用怎样相互不影响[已解决]
本帖最后由 leon460 于 2011-7-20 15:44 编辑比如,checkfile($source1,$target1)里面有100000个文件,难道非要移动完这10000个文件才能移动checkfile($source2,$target2)? 请问怎么修改代码$i=1
解决方法:暂用 coproc.au3 多线程解决。
Do
checkfile($source1,$target1)
checkfile($source2,$target2)
Sleep(5000)
Until $i=0
Func checkfile($source,$target)
$filenum=1
$search = FileFindFirstFile($source & "\*.pdf") ;list 所有的文件夹名称,不遍历子文件
While 1
$file = FileFindNextFile($search)
If @error Then
ExitLoop
Else
sleep(1000) ;;*************发现文件后,暂停移动,以防止次文件正在被上传
;MsgBox(0,"$file",$file)
$MoveFlag = FileMove($source & "\" & $file,$target)
;MsgBox(0,"$MoveFlag",$MoveFlag)
if $MoveFlag = 0 then
Do
$fileNew = $file
$filenum+=1
$fileNew = StringTrimRight ( $fileNew, 4 );除去右边 .pdf 得到文件名
;MsgBox(0,$source & "\" & $file,$target & "\" & $fileNew & "-02.pdf")
$MoveFlag = FileMove($source & "\" & $file,$target & "\" & $fileNew & "-" &$filenum & ".pdf")
Until $MoveFlag = 1
$filenum=1
;$file2 = FileOpen(@scriptdir & "\BackupLog.txt", 1)
;FileWrite($file2,$source & "\" & $file & "" & _Now() & " 移动此文件失败" & @CRLF)
;FileClose($file2)
endif
EndIf
WEnd
FileClose($search)
EndFunc
你是想多线程? 那我只能说AU3满足不了 回复 2# shenrenba
不一定要多线程,只要效果达到就可以了,呵呵 最直接最理想的解决方法就是多线程了.
但au3由于在最初设计时考虑不周不支持。
你可以用多进程试下
但多进程很难动态共享数据区 回复 4# happytc
没那水平就别怨编程工具不够强大了,有DllCall就足以实现多线程,就看你会不会调用了。等你到了高手的程度,再回过头来看看你现在说的话吧。 不是一个概念的
就象你不会开车,但会请司机,使得车也能跑,就能说明你会开车了?
另外,直接支持多线程的语言,不需要什么高手,就是初哥也能直接了当地简简单单地用上多线程了。
虽然我也爱au3,但缺陷就是缺陷,没必要掩饰 要不P老大你是高手你写个au3的多线程函数, 象那个多进程函数_CoProc("MyFunc", "para")一样的: _MultiThread("MyFunc", "Para") 回复 7# happytc
我不记得自己何时说过自己是高手啊。能正常运行AutoIt标准自定义函数的多线程函数,我写不出来,我现在没那水平。不过,至少我测试过了,测试了不下千次,测试用的方法不下20种,没一种方法成功。现在我水平还不到家,以后我可能会写出这样一个多线程的函数,但这需要时间来积累知识,我并不是在说能解决多线程问题的人一定会是我,我也希望有人能实现多线程。如果你还认为AU3支持多线程 简直就是天方夜谭,那可真是太out了,要知道古代的天方夜谭到今天都一一实现了,自不必说这是必然,正因为有人为此努力所以才能将近乎神话的事情变成必然的现实,不测试、不实践是永远也不会进步的。试问你在多线程方面,曾做过多少测试呢?~ 你可以调用命令行移动啊
run神马神马的 这样楼主只需要
#Include <_MultiThread.au3>
就可以简单明了直接解决他提出的问题:
_MultiThread("checkfile", "source", "target") 真是讨论出真知!希望AU3在这方面也能尽快得到补缺
标题
回复 8# pusofalse.au3的我 只试了试把c的多线程函数封装成DLL后用au3的DllCall调用,但发现只能实现特定目的的函数,用于一般性自定义函数就总是会有这样那样的问题
个人觉得au3这种本身是单线程的设计思想
要实现不共享动态数据区的多线程应该比较容易点 两位大哥,多谢了,虽然你们看的角度不一样,但是方向是一样的,呵呵 理论上来说
AU3也是可以支持多线程的
C语言通过调用DLL实现多线程
AU3同样可以通过调用DLL来实现多线程 路过,我不懂AU3,更不懂什么进程
{:face (229):}
页:
[1]
2