Tôi đang gặp sự cố với đa luồng trong delphi. Tôi có một danh sách các tên (khoảng 2.000 tên), và tôi cần lấy một số dữ liệu của mỗi tên trong trang của tôi. Hệ thống của tôi hoạt động hoàn hảo, ngoại trừ điều khiển luồng.Đa chủ đề Delphi
Tôi muốn tạo 10 chuỗi và khi một số chuỗi chấm dứt, hãy tạo một chuỗi khác ... cho đến khi kết thúc danh sách.
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
Vâng, tôi không đặt TCheck.Constructor vì vấn đề là phương pháp cách tôi kiểm tra số lượng chuỗi đã tạo. Ý tôi là, phần mềm của tôi chỉ dừng lại mà không có bất kỳ thông báo lỗi nào, đôi khi kiểm tra 500 tên, đôi khi 150 tên ...
Xin lỗi vì Bad English.
Bạn có thể đăng câu hỏi về TCheck ctor không? –
Ngoài ra, nếu bạn muốn 10 chủ đề, tạo 10 chủ đề và yêu cầu họ xử lý tất cả công việc của bạn bằng cách xếp hàng cho họ. Không liên tục tạo/chấm dứt/tiêu diệt chúng. Hãy quên đi các chủ đề tCount và vi quản lý. –
Vâng. Bạn cần một nhà sản xuất làm đầy hàng đợi trên luồng và 10 người tiêu dùng tiêu hao nó. –