找回密码
 加入
搜索
查看: 4174|回复: 2

[效率算法] 关于 多进程 无法识别 Koda创建 的变量的问题

[复制链接]
发表于 2014-5-24 11:43:57 | 显示全部楼层 |阅读模式
我自己模仿着写了一个多进程的例子同时比较数据 同时计算时间 不知道什么原因 总是提示我使用了未经声明的变量 但是这个变量是通过 Koda创建的啊,如果不使用多进程的话就没问题啊 是不是我进程的地方写的不对啊望各位高手指点一下 即使我将其声明为全局变量 还是不行啊 谢谢另外还有两个小问题:
1 为什么第60行If $Input1="" Or $Input2="" Then 不能执行 如果是 If $Input1=4 Or $Input2=4 Then 就行呢
2 如果我比对的文件中有5万多行的数据 这样一行一行的对比 自己运行了一下觉得效率有点慢 有没有什么好的办法呢? 优化代码或者其他方法都行啊

这个是有多进程的代码:
#include <array.au3>
#include <file.au3>
#include <CoProc.au3> ;多进程udf
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("小鹤码表比对器", 380, 220,492, 124)
Global $Label1 = GUICtrlCreateLabel("请选择旧码表:", 16, 16, 116, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
Global $Input1 = GUICtrlCreateInput("", 64, 40, 233, 25)
Global $Button1 = GUICtrlCreateButton("选择文件", 304, 40, 57, 25)
Global $Input2 = GUICtrlCreateInput("", 64, 112, 233, 25)
Global $Button2 = GUICtrlCreateButton("选择文件", 304, 112, 57, 25)
Global $Button3 = GUICtrlCreateButton("开始比较", 72, 152, 225, 41)
Global $Label2 = GUICtrlCreateLabel("请选择新码表:", 16, 85, 116, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
Global $Label3 = GUICtrlCreateLabel("已比对0行数据", 80, 200, 300, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
Global $Label4 = GUICtrlCreateLabel("用时0秒", 305, 200, 100, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $min=0,$sed=0
Global $var;传送多进程,用于通知开始计时

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        Local $file1=FileOpenDialog("请选择文件",@DesktopDir,"文本文件 (*.txt)" )
                        If @error Then
                                MsgBox(0,"","请重新选择!")
                        Else
                                GUICtrlSetData($Input1,$file1)
                                $Input1=$file1
                        EndIf
                Case $Button2
                        Local $file2=FileOpenDialog("请选择文件",@DesktopDir,"文本文件 (*.txt)" )
                        If @error Then
                                MsgBox(0,"","请重新选择!")
                        Else
                                GUICtrlSetData($Input2,$file2)
                                $Input2=$file2
                        EndIf
                Case $Button3
                         _CoProc("main")
                         _CoProcReciver("time") ;注册Reciver()函数来接收子进程传递过来的消息
        EndSwitch
WEnd


Func main()
        If $Input1="" Or $Input2="" Then
                MsgBox(0,"提示","您还没有选择文件,请重新选择!",2)
                Return;提前终止函数
        EndIf
Local $txt1=FileOpen($Input1)
Local $txt2=FileOpen($Input2)
Local $num,$a=1
Local $array[$a][2];存放对比数据
Local $readline1=_FileCountLines($Input1)
Local $readline2=_FileCountLines($Input2)
;MsgBox(0,"",$readline1&@CRLF&$readline2)
If $readline1 > $readline2 Then
        Local $count=$readline1
Else
        $count=$readline2
EndIf
For $num=1 To $count
        Local $line1,$line2
        $line1=FileReadLine($txt1,$num)
        $line2=FileReadLine($txt2,$num)
   
   If $num=1 Then ;开始处理第一行数据时,开始计时
          _CoProcSend($gi_CoProcParent,"1")
    EndIf
   
        If $line1<>$line2 Then
                ReDim $array[$a][2]
                $array[$a-1][0]=$line1
                $array[$a-1][1]=$line2
                $a+=1
        EndIf
        If Mod($num,1000)=0 Then
                GUICtrlSetData($Label3,"共"&$count&"行,"&"已比对"&$num&"行数据")
        EndIf        
Next
FileClose($txt1)
FileClose($txt2)
_ArrayDisplay($array)
EndFunc

Func Time($B);计时
        MsgBox(0,"",$B)
    AdlibRegister("time_1",1000)
EndFunc

Func time_1()
         Local $fen
         $sed+=1
         If $sed=60 Then
                $sed=0
                $min+=1
         EndIf
        If $min<10 Then 
          $fen="0"&$min
    Else
          $fen=$min
    EndIf
    If $sed<10 Then $sed="0"&$sed
        GUICtrlSetData($Label1,$fen&":"&$sed)
EndFunc
 

CoProc.au3 文件  

本帖子中包含更多资源

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

×
发表于 2014-5-24 21:17:27 | 显示全部楼层
GUICtrlRead($input1) or GUICtrlRead($input2)
 楼主| 发表于 2014-5-24 21:38:57 | 显示全部楼层
回复 2# gto250


    谢谢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 22:12 , Processed in 0.079928 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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