不死帝国 发表于 2014-1-7 22:32:11

关于本人对Autoit的多线程

看论坛大家的讨论都说不支持多线程;但又有大神用绘编可以搞多线程;绘编不是每人都行的。不知道论坛里有没有大神比较了解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个;(不是多线程;这个根本不可能;会直接卡死界面)
//顺序执行 就是一个一个;这个不用多说了

skyfree 发表于 2014-1-8 07:25:09

不是太重的任务,可以用多进程模拟多线程

joyran 发表于 2014-1-8 09:00:59

如果想做多线程处理,au3毕竟不是它的强项...
页: [1]
查看完整版本: 关于本人对Autoit的多线程