蜘蛛抱蛋 发表于 2010-12-9 18:41:15

求个判断表达式

while 1
if true then
.....
endif
sleep(100)
Wend可以用比较节省内存的方式写吗?
去掉“while 1”这段大概能节约一半内存
代码目的大概是:循环判断某个变量是否为true,若是则执行if内的语句

风行者 发表于 2010-12-9 18:51:38

想不到好方法
HotKeySet("{F4}","Change")

Global $a = False
Do
        Sleep(100)
Until $a

Func Change()
        $a = True
EndFunc

lixiaolong 发表于 2010-12-9 19:18:52

回复 1# 蜘蛛抱蛋

优化内存不就解决了吗?

While 1
        _ReduceMemory(@AutoItPID)
        If True Then
                MsgBox(0, 0, 0)
        EndIf
        Sleep(100)
WEnd


Func _ReduceMemory($i_PID = -1)
        If $i_PID <> -1 Then
                Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
                DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle)
        Else
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
        EndIf

        Return $ai_Return
EndFunc   ;==>_ReduceMemory

benkel 发表于 2010-12-9 20:50:02

想不明白,现在内存那么大,AU3占这点内存算个啥子?!

蜘蛛抱蛋 发表于 2010-12-9 23:11:44

3楼的料猛,学习了。
2楼可能不太适合我的情况(不是让程序等待,为真时继续执行,,而是反复判断某个变量,为真时执行特定代码,也即if 内的代码)。
不管怎么说,谢谢2位了!

pusofalse 发表于 2010-12-10 01:08:53

回复 4# benkel


    幸好,不是所有人都是你这样的想法。
你原本的代码在1秒钟内能完成某种功能,你在考虑到程序效率及资源的占用情况之后,如果你优化了它,那么新的代码就可以在0.9秒内完成同一种功能,不要小看这0.1秒,想想2的0次方是1,1次方是2,4次方16,到了32次方,就成了43亿,指数级的增长速度是非常吓人的。
你的代码能在1小时内做完一件事情,而我的却可以在59分钟之内完成。你的需要1天内完成,我的却能在23小时内完成。你的能在1年内完成,我的就能在8个月内完成。你的代码需要100年,我的却只需要50年,这就是差别。

蜘蛛抱蛋 发表于 2010-12-10 07:34:02

同意楼上的,不仅如此,就我这个例子而言,布尔值2秒左右会变化一次,如果代码执行太慢,超过两秒,岂不漏掉了许多?4楼想明白没

leon460 发表于 2010-12-10 09:04:05

大家能谈谈以上问题有什么样的解决思路么?

kingfirekkk 发表于 2010-12-10 10:17:50

回复 6# pusofalse

深有同感,同样是写程式的,有的人写出来的代码只用十行,而有的人写出来却有百来行,并不是说两者之间有一者有错,而是使用的算法,思路,逻辑思维不一样,所以出来的结果也不一样!这也就印证了一句话:“条条大道通罗马”.....
但是,好的编程风格和思路,可以少走很多弯路啊。

lamlp 发表于 2010-12-10 14:20:41

用AdlibRegister 注册IF里的为一个 Adlib 函数,可以指定多长时间调用一次函数
页: [1]
查看完整版本: 求个判断表达式