請教ThreadPool 的用法 |
尚未結案
|
blue
中階會員 發表:170 回覆:136 積分:81 註冊:2002-04-15 發送簡訊給我 |
Hi, 各位先進大家好:
以下是小弟測試使用 ThreadPool, 有以下二個問題請教: 1.SetMaxWorkerThreads的作用為何?我想讓執行緒在限制個數下執行,可是實際上卻是依序啟動並且同時執行 2.有增加Application.ProcessMessage, 可是按下關閉視窗卻沒有作用, 謝謝! unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.Threading, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Controls.Presentation; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } Pool: TThreadPool; Tasks: Array of ITask; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} function CreateJob(ALabel: TLabel): TProc; begin Result := (procedure ( ) var i: Integer; begin for i := 1 to 10000000 do begin TThread.Synchronize(nil, procedure begin ALabel.BeginUpdate(); ALabel.Text := IntToStr(i); ALabel.EndUpdate(); Application.ProcessMessages(); end); end; end); end; procedure TForm1.Button1Click(Sender: TObject); begin SetLength(Tasks, 2); Tasks[1] := TTask.Create(CreateJob(Label1) ,Pool); Tasks[1].Start; Tasks[2] := TTask.Create(CreateJob(Label2) ,Pool); Tasks[2].Start; end; procedure TForm1.FormCreate(Sender: TObject); begin Pool := TThreadPool.Create(); Pool.SetMaxWorkerThreads(1); Pool.SetMinWorkerThreads(0); end; procedure TForm1.FormDestroy(Sender: TObject); begin FreeAndNil(Pool); end; end. |
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
看不懂你想要达到什么目的,问题是什么?
你的这个 CODE 看起来有问题。简单说,for 是 Thread 在 run,但 run 进去后,因为 TThread.Sync 又让 Thread 停下来,等待 Main Thread 去 run。 如果有两个 Thread 同时跑 for,但因为某个 Thread 进入了 Main Thread,另外一个 Thread 就只能等待它的 Main Thread 跑完才能进入 Main Thread 跑。 所以,你这个代码,看不明白想要做什么。 |
blue
中階會員 發表:170 回覆:136 積分:81 註冊:2002-04-15 發送簡訊給我 |
Hi, 感謝 pcplayer99 大大指導:
小弟的需求是把要執行的Thread 丟入 ThreadPool 中, 但,限制一次最多只能有 SetMaxThread 的數量在跑,而不是丟幾個就幾個跑, 這不是 ThreadPool 的目的嗎? 謝謝! ===================引 用 pcplayer99 文 章=================== 看不懂你想要达到什么目的,问题是什么? 你的这个 CODE 看起来有问题。简单说,for 是 Thread 在 run,但 run 进去后,因为 TThread.Sync 又让 Thread 停下来,等待 Main Thread 去 run。 如果有两个 Thread 同时跑 for,但因为某个 Thread 进入了 Main Thread,另外一个 Thread 就只能等待它的 Main Thread 跑完才能进入 Main Thread 跑。 所以,你这个代码,看不明白想要做什么。 |
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |