找回密码
 加入
搜索
查看: 8754|回复: 8

[效率算法] AdlibRegister妙用【已解决】

  [复制链接]
发表于 2011-7-24 17:56:17 | 显示全部楼层 |阅读模式
本帖最后由 love5173 于 2011-7-26 16:02 编辑

很多人纠结多线程的问题,当然我也知道AU3本身对多线程的支持不是很好!不管你是dllcall的还是别的方法!
我这里只给出一个用AdlibRegister实现多线程的方法,功能不是很强大,但是你用好了一样优点多多!
本来这个函数的作用是每隔一段时间执行一段代码,但是我们在想同时进行两个动作的时候却要立刻执行,这样就必须这个时间要足够短,并且我们不需要反复执行此函数,这样我们只需要在函数执行的开始把函数注销掉就好了,函数能正常执行,且不会影响主函数!
While 1
        Sleep(2000)
        
        AdlibRegister ("hi",1)
        For $i=0 To 10 
                Sleep(1000)
        Next
        
WEnd

Func hi()
        AdlibUnRegister ("hi");函数执行后马上注销,保证函数只执行一次
        MsgBox(0,"","hi",1)
EndFunc
以上言论纯属YY,版主一直移到无意义区吧,以免祸害别人
发表于 2011-7-24 23:51:05 | 显示全部楼层
adlib还是单线程,她不是实现多线程的方法。之所以有这个假象,因为MSGbox是多线程的,且你的adlib触发时,主线程是空闲的。
发表于 2011-7-25 20:30:49 | 显示全部楼层
AdlibUnRegister 只是一个定时器而已。。
发表于 2011-7-25 22:45:13 | 显示全部楼层
本帖最后由 happytc 于 2011-7-26 09:14 编辑

回复 1# love5173


   Adlib样子很象多线程的功能,但实质区别太大了。
比如,你用它,怎么实现动态共享数据区?

并且你给的例子根本连模拟实现多线程都不能,如下面的,你看看,主循环在打印吗?

$num = 65

While 1
        Sleep(2000)
        ConsoleWrite(Chr($num) & @CRLF)
        AdlibRegister("hi", 1)
        For $i = 0 To 10
                Sleep(1000)
        Next
        $num += 1
WEnd

Func hi()
        AdlibUnRegister("hi");函数执行后马上注销,保证函数只执行一次
        For $i = 1 To 100
                ConsoleWrite($i & @CRLF)
                Sleep(1000)
        Next
        
EndFunc 
发表于 2011-7-26 09:19:33 | 显示全部楼层
另外,论坛的语法高亮,也该更新一下了,看看上面的,连AdlibRegister都不能识别了。

并且希望修时,别再自动添加双倍空格了,让它保持跟SCite一样的一个Tab四个空格不好吗?免得从论坛拷个代码下来,都得整理一下,麻烦!
 楼主| 发表于 2011-7-26 16:00:37 | 显示全部楼层
回复 4# happytc
我也发现了,确实不行,不但主函数不行,而且定时器在运行的时候别的定时器也不能正常运行!
也就是说我的言论是完全错误的,我以前写的一些代码也有毛病!
谢谢指正
 楼主| 发表于 2011-7-26 16:00:51 | 显示全部楼层
回复 2# republican

谢谢指正
发表于 2011-8-9 21:10:51 | 显示全部楼层
表示围观,不过楼主的方法,偶尔倒是可以用的到
发表于 2015-7-24 17:54:09 | 显示全部楼层
一直不太了解多线程,多谢分享啊
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 20:33 , Processed in 0.108921 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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