找回密码
 加入
搜索
查看: 4102|回复: 3

[系统综合] 关于本人对Autoit的多线程

[复制链接]
发表于 2014-1-7 22:32:11 | 显示全部楼层 |阅读模式
看论坛大家的讨论都说不支持多线程;但又有大神用绘编可以搞多线程;绘编不是每人都行的。不知道论坛里有没有大神比较了解delphi的;现在delphi提供的多线程是非常方便的;或许能能以大神们的力量查看delphi的多线程类;看看它是如何实现过来的;而且还非常之强大。

有心研究AU3多线程的大神可以看看delphi的这些

TThread 类:这个就是delphi的多线程类

TThread.CreateAnonymousThread(); //普通
TThread.Queue();                 //队列
TThread.Synchronize();           //VCL 同步



//准备让线程调用的测试函数

procedure Draw(aCanvas: TCanvas; X,Y: Integer; aCount: Integer = 100000);

var

  i: Integer;

begin

  for i := 0 to aCount do

  begin

    aCanvas.Lock;

    aCanvas.TextOut(X, Y, IntToStr(i));

    aCanvas.Unlock;

  end;

end;



//同步执行

procedure TForm1.Button1Click(Sender: TObject);

begin

  TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 10); end).Start;

  TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 30); end).Start;

  TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 50); end).Start;

  TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 70); end).Start;

  TThread.CreateAnonymousThread(procedure begin Draw(Canvas, 50, 90); end).Start;

end;



//顺序执行

procedure TForm1.Button2Click(Sender: TObject);

begin

  TThread.Queue(nil, procedure begin Draw(Canvas, 150, 10); end);

  TThread.Queue(nil, procedure begin Draw(Canvas, 150, 30); end);

  TThread.Queue(nil, procedure begin Draw(Canvas, 150, 50); end);

  TThread.Queue(nil, procedure begin Draw(Canvas, 150, 70); end);

  TThread.Queue(nil, procedure begin Draw(Canvas, 150, 90); end);

end;
 楼主| 发表于 2014-1-7 22:36:47 | 显示全部楼层
以上代码实现是同时在界面上打印从 0 到 十万 的循环;如果不是多线程;拖动窗体会卡死的;但使用了多线程后拖动也是正常执行。

//同步执行那里同时一次打印5个;(不是多线程;这个根本不可能;会直接卡死界面)
//顺序执行 就是一个一个;这个不用多说了
发表于 2014-1-8 07:25:09 | 显示全部楼层
不是太重的任务,可以用多进程模拟多线程
发表于 2014-1-8 09:00:59 | 显示全部楼层
如果想做多线程处理,au3毕竟不是它的强项...
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-5 07:56 , Processed in 0.081598 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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