PDA

View Full Version : مشکل در استفاده از Thread



mohsen57
جمعه 16 فروردین 1387, 21:33 عصر
من یک Thread ساخته ام که برای تست یک تابع را فراخوانی می کند که در ان تابع یک حلقه 200000 بار اجرا می شود ولی تا وقتی حلقه به پایان نرسیده برنامه گیر میکنه!:ناراحت: انگار که از Thread استفاده نشده.:متفکر:

babak_delphi
جمعه 16 فروردین 1387, 21:43 عصر
در مورد نحوه استفاده از Thread ها ، دلفی مثال داره
به اونها مراجعه کن
در همین سایت هم قبلا بحث شده
به هر حال فکر کنم همون مثال دلفی میتونه مشکلت رو حل کنه
C:\Program Files\Borland\Delphi7\Demos\Threads

mohsen57
جمعه 16 فروردین 1387, 22:05 عصر
من از این مقاله استفاده کردم ولی نمیدونم چرا جواب نمیده
http://barnamenevis.org/forum/showthread.php?t=79463

babak_delphi
جمعه 16 فروردین 1387, 23:21 عصر
یه سر هم به اون مثال بزنید
به Help دلفی هم سر بزنید
توضیحاتش به نظر من نتیجه بخش تره
Help + مثال دلفی

Mahmood_M
شنبه 17 فروردین 1387, 00:10 صبح
اگه مشکلی نداره ، کد مربوط به Thread خودتون رو بزارید تا بررسی بشه ...

این طوری جواب بهتری میگیرید ...

mohsen57
شنبه 17 فروردین 1387, 01:40 صبح
این کد:

Type
MyThread= Class(TThread)
private
procedure dotest;
protected
procedure Execute;Override;
end;




implementation

{$R *.dfm}

procedure MyThread.Execute;
begin
Synchronize(dotest);
end;

procedure MyThread.dotest;
var
i: integer;
begin
for i:=0 to 200000 do
frmMain.Edit1.Text := inttostr(strtoint(frmMain.Edit1.Text) + 1);

end;

vcldeveloper
شنبه 17 فروردین 1387, 02:48 صبح
یک حلقه 200000 بار اجرا می شود ولی تا وقتی حلقه به پایان نرسیده برنامه گیر میکنه!
علتش استفاده از متد Synchronize هست. درباره اش قبلا توضیح داده شده، همین عبارت Synchronize را در همین بخش جستجو کنید.

arshia_
شنبه 17 فروردین 1387, 10:24 صبح
برای جلوگیری از فریز شدن برنامه در زمانی که از حلقه استفاده می کنید می شه از فرمان application.processmessage; استفاده کنی

mohsen57
شنبه 17 فروردین 1387, 11:28 صبح
علتش استفاده از متد Synchronize هست. درباره اش قبلا توضیح داده شده، همین عبارت Synchronize را در همین بخش جستجو کنید.
از Synchronize استفاده نکردم مشکل حل شد.

vcldeveloper
شنبه 17 فروردین 1387, 12:21 عصر
برای جلوگیری از فریز شدن برنامه در زمانی که از حلقه استفاده می کنید می شه از فرمان application.processmessage; استفاده کنی
این زمانی مفید هست که حلقه در Thread اصلی برنامه جریان داشته باشه. اگر توی یک Thread جداگانه باشه، ProcessMessage کار خاصی براش انجام نمیده. البته اینجا هم بخاطر استفاده از متد Synchronize، کد حلقه هر چند به ظاهر در یک Thread جداگانه داراه اجرا میشه، ولی در عمل در همون Thread اصلی برنامه اجرا میشه. علتش هم خود متد Synchronize هست که برای Update رابط گرافیکی کاربر در Thread اصلی برنامه طراحی شده.