برای استفاده از Thread باید درخواستهایی که از ترد و Object های متعلق به اون دارید رو درون Execute مربوط به Thread اجرا کنید ، وقتی درون تردتون چیزی رو Create میکنید ، اون شیء متعلق به ترد هست ، چیزی که باعث به اصطلاح هنگ کردن برنامه میشه درخواست استفاده از آبجکتهای یک ترد از طرف ترد دیگه بدون همزمان سازیه ، در نمونه ی بالا می تونید مقدار String خروجی رو در یک متغیر در داخل خود ترد قرار بدید و از اون بخونید :
type
TGetText = class(TThread)
public
Rst : String;
procedure Get;
private
Params : TStringList;
IHTTP : TIDHTTP;
Address: string;
protected
procedure Execute; override;
end;
بهتره که آبجکت ها درون بدنه ترد تعریف بشند تا درون Procedure
procedure TGetText.Get;
begin
IHTTP := TIDHTTP.Create();
Params := TStringList.Create;
Params.Add('request = somthing');
try
Rst := IHTTP.Post(Address, Params);
finally
FreeAndNil(IHTTP);
FreeAndNil(Params);
end;
end;
procedure TGetText.Execute;
begin
try
Get;
finally
Terminate;
end;
end;
البته بهتره که Object ها در رویداد OnCreate ترد Create و در رویداد OnDestroyed ترد هم Free بشن
var
Text_string, Web_String, Temp_WEb_String: string;
temp: string;
i: integer;
GetITEGText : TGetText;
begin
GetITEGText := TGetText.Create(True);
GetITEGText.FreeOnTerminate := True;
GetITEGText.Resume;
if GetITEGText.Rst <> '' then
Web_String := GetITEGText.Rst;
end;
این تغییرات مشکل هنگ کردن برنامه رو حل میکنن ولی اگر قصد استفاده بهتر از ترد رو دارید بهتره کمی در موردش تحقیق کنید ، در همین سایت هم قبلا بحث های مفیدی شده ، موفق باشید ...