PDA

View Full Version : سوال: نحوه استفاده از Thread در لزاروس



Majid.Ebru
سه شنبه 25 آبان 1395, 10:21 صبح
سلام به همه
من توی برنامه م یه منتغیر به نام i_number_element دارم که به صورت عمومی (Global) تعریفش کردم، این متغیردر جاهای مختلف برنامه تغیر می کنه ، می خوام مقدارش رو نمایش بدم و به یه ProgressBar رابطش دادم .برنامه فقط مقدار اول یعنی 0 رو نشون می ده تا اینکه به انتها می رسه و عدد نهایی رو نشون می ده.یعنی ProgressBar در یه لحظه به انتها می رسه.

مشکل اصلیم اینه هر کاری کردم نمی شه (http://barnamenevis.org/showthread.php?525430-%D8%B9%D8%AF%D9%85-%D8%AA%D8%BA%DB%8C%D8%B1-%D9%85%D9%82%D8%A7%D8%AF%DB%8C%D8%B1-%D8%9F)

از دوستان پرسیدم راهنمایی کردن و گفتن که باید از Thread استفاده کنم.توی اینترنت یه مثال ساده از نحوه استفاده Thread توی لازاروس پیدا کردم و مراحلش رو اینجا قرار می دم.من نوشتم و اجراش کردم و بدون مشکل انجام شد.


{ TH }

TH = Class(TThread)
public
constructor create(createsuspended : Boolean);
procedure Atualizaform;
protected
procedure Execute ; override;
end;




بدنه برنامه

{ TH }

constructor TH.create(createsuspended: Boolean);
begin
FreeOnTerminate:= True;
inherited Create(createsuspended);
end;

procedure TH.Atualizaform;
begin
Form_Main.Label1.Caption:= IntToStr(x);
end;

procedure TH.Execute;
begin
for x:= 1 to 100000 do
begin
Synchronize(@Atualizaform);
end;
end;


چطور می تونم متغیر خودم رو نشون بدم.توی این مثال متغیری که توی حلقه هست و نشون می ده

Mahmood_M
سه شنبه 25 آبان 1395, 12:15 عصر
اگر متغیر رو به صورت عمومی تعریف کرده باشید می تونید مثل همین مثال مقدارش رو نمایش بدید
در یک Procedure مثل AtualizeForm در مثال بالا مقدار Position مربوط به ProgressBar رو برابر مقدار متغیر قرار بدید
تست کردید ؟ چه مشکلی پیش میاد ؟

Majid.Ebru
سه شنبه 25 آبان 1395, 12:47 عصر
سلام
اسم متغیر تغیر دادم به Num_Thread
اگه منظورتون اینجوری :

procedure TH.Atualizaform;
begin
Form_Main.Label1.Caption:= IntToStr(Num_Thread);
Form_Main.ProgressBar1.Position:= Num_Thread;
end;

متاسفانه نه مقدار لیبل تغییر کرد و نه مقدار ProgressBar


یه سوال دیگه : حالا چجوری ترد رو stop کنم؟؟

Majid.Ebru
شنبه 29 آبان 1395, 09:07 صبح
سلام
من با این کار مشکلم حل شد.
نمی دونم درسته یا نه ؟؟
.
.

هر وقت که متغیر ، مقدارش عوض میشه از دستور :

TH.Execute;

استفاده می کنم.