找回密码
 加入
搜索
查看: 5508|回复: 7

[效率算法] 关于3个for循环的问题!~

  [复制链接]
发表于 2011-2-16 03:25:16 | 显示全部楼层 |阅读模式
本帖最后由 cutyourchicken 于 2011-2-16 03:33 编辑


3个for循环嵌套,会大量占用CPU,有什么办法解决吗?
Func UpdateDat()
        $Mlistcount=_GUICtrlListView_GetItemCount(GUICtrlGetHandle($listview1))
        Dim $array[$count][$sub]
                        
        For $i = 0 To $count - 1
                For $x = 0 To $sub - 1
                        $array[$i][$x] = ControlListView($handle, '', $ctrl, 'GetText', $i, $x)
                                If $array[$i][8]<> "" Then 
                                $Info= "X..."                                Else
                                If $array[$i][0] == "" Then
                                $Info= "Y..."
                                Else
                                $Info= "Z..."
                                EndIf
                                EndIf  
                        For $bi = 0 To $Mlistcount-1 
                                If _GUICtrlListView_GetItemText(GUICtrlGetHandle($listview1),$bi,0)==StringTrimLeft($array[$i][1],1) Then
                                _GUICtrlListView_SetItemText($listview1,$bi,$array[$i][9],1)
                                _GUICtrlListView_SetItemText($listview1,$bi,$array[$i][5],2)
                                _GUICtrlListView_SetItemText($listview1,$bi,$array[$i][8],3)
                                _GUICtrlListView_SetItemText($listview1,$bi,$Info,4)
                                ExitLoop
                                EndIf
                        Next
                Next
        Next
EndFunc
        
不好意思,代码排得比较乱,改了一下了

本帖子中包含更多资源

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

×
发表于 2011-2-16 05:29:07 | 显示全部楼层
延迟一下就好。
发表于 2011-2-16 08:59:21 | 显示全部楼层
Func UpdateDat()
        $Mlistcount=_GUICtrlListView_GetItemCount(GUICtrlGetHandle($listview1))
        Dim $array[$count][$sub]
                        
        For $i = 0 To $count - 1
                For $x = 0 To $sub - 1
                        $array[$i][$x] = ControlListView($handle, '', $ctrl, 'GetText', $i, $x)
                                If $array[$i][8]<> "" Then 
                                $Info= "X..."                                Else
                                If $array[$i][0] == "" Then
                                $Info= "Y..."
                                Else
                                $Info= "Z..."
                                EndIf
                                EndIf  
                        For $bi = 0 To $Mlistcount-1 
                                If _GUICtrlListView_GetItemText(GUICtrlGetHandle($listview1),$bi,0)==StringTrimLeft($array[$i][1],1) Then
                                _GUICtrlListView_SetItemText($listview1,$bi,$array[$i][9],1)
                                _GUICtrlListView_SetItemText($listview1,$bi,$array[$i][5],2)
                                _GUICtrlListView_SetItemText($listview1,$bi,$array[$i][8],3)
                                _GUICtrlListView_SetItemText($listview1,$bi,$Info,4)
                                ExitLoop
                                EndIf
                               _ winapi_emptyworkingset()
                        Next
                               _ winapi_emptyworkingset()
                Next
                               _ winapi_emptyworkingset()
        Next
EndFunc
        
 楼主| 发表于 2011-2-16 13:26:20 | 显示全部楼层
本帖最后由 cutyourchicken 于 2011-2-16 13:56 编辑

回复 3# netegg


    测试过了,还是没有什么效果!~还是和以前一样,卡GUI
 楼主| 发表于 2011-2-16 13:57:50 | 显示全部楼层
回复 2# 风雨网络

延时了一下,的确有效果,不过还是会卡GUI
发表于 2011-2-16 15:33:25 | 显示全部楼层
回复 4# cutyourchicken

那段只是为了资源占用的事,你又没问卡不卡的事
发表于 2011-2-16 15:58:13 | 显示全部楼层
把gui界面也写出来,这样可以直接实行,这样别人也愿意帮你.
找问题也好找,没头没尾的代码是很费力的.
发表于 2011-2-17 08:51:46 | 显示全部楼层
感覺應該是刷新問題(指在gui模式時)
搭配個暫停刷新顯示即可
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-4 13:12 , Processed in 0.081503 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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