デルファイのマルチスレッドに問題があります。私は名前のリスト(約2.000の名前)を持っているので、自分のサイトの各名前のデータを取得する必要があります。私のシステムはスレッド制御を除いて完全に動作します。マルチスレッドDelphi
私は10個のスレッドを作成したいと思います。スレッドが終了すると、リストの最後まで別の...を作成します。
var
Form1: TForm;
tCount: Integer; //threads count
implementation
type
TCheck = class(TThread)
public
constructor Create(Name: string);
destructor Destroy; Override;
protected
procedure Execute; Override;
end;
MainT = class(TThread)
protected
procedure Execute; Override;
end;
destructor TCheck.Destroy;
begin
Dec(tCount);
end;
procedure MainT.Execute;
var
i: Integer;
Load: TStringList;
begin
Load:=TStringList.Create;
Load.LoadFromFile('C:\mynames.txt');
for i:= 0 to Load.Count -1 do
begin
if tCount = 10 then //if we have 10 threads running...
begin
repeat
Sleep(1);
until tCount < 10;
end;
TCheck.Create(Load.Strings[i]);
TCheck.Start;
Inc(tCount);
end;
end; // end of procedure
問題は、私が作成したスレッドの数をチェックしてるかの方法であるので、まあ、私はTCheck.Constructorを入れていません。私のソフトウェアは、エラーメッセージが表示されずに停止することがあります。時には500の名前、時には150の名前をチェックすることもあります。
申し訳ありません。
TCheckツールを投稿できますか? –
また、10個のスレッドが必要な場合は、10個のスレッドを作成し、キューに入れてすべての作業を処理させます。それらを継続的に作成/終了/破棄しないでください。 tCountとマイクロ管理スレッドは忘れてください。 –
うん。スレッドセーフ待ち行列を埋めるプロデューサーと、それを排除する消費者が必要です。 –