PDA

View Full Version : Thread



shahram.sys
دوشنبه 30 اردیبهشت 1387, 15:06 عصر
سلام به همه دوستان .
من توی این سایت یه تاپیک دیدم که در مورد Thread ها توضیح داده بود .
http://barnamenevis.org/forum/showthread.php?t=79463
ولی هر چی سعی کردم نتونستم ازش استفاده کنم . یعنی دقیقا متوجه نشدم که کدها رو کجا باید بزارم .
مثلا:

Type
MyThread = Class(TThread)
private

protected
...
end;
این کلاس رو کجا باید تعریف کنم . وقتی که یه پروژه ایجاد میکنیم در یونیت یه کلاس از نوع TForm تعریف میکنه حالا من این کلاس رو کجا باید ایجاد کنم .

nouri2015
دوشنبه 30 اردیبهشت 1387, 16:41 عصر
توی sample های دلفی یک سری بزنید پیدا می کنید.
New->Other...->Thread Object اسم کلاس رو می دی برات اون کلاس رو درست می کنه

Valadi
دوشنبه 30 اردیبهشت 1387, 16:48 عصر
یک از اعضا سایت یک مقاله در این زمینه در سایت قرار داده است بهتر یک نگاهی بهش بندازی
http://barnamenevis.org/forum/showthread.php?t=79473

aserfg
دوشنبه 30 اردیبهشت 1387, 19:56 عصر
سلام دوست عزيز من يه نمونه كد برات مي زارم نه تنها در كار با كلاس tthreadبلكه همواره در كار با كلاسهايي غير از كلاس استاندارد دلفي(tform بايد به اين روش عمل كني .موفق باشي.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
mythread=class(tthread)
private
procedure doprogress;
protected
procedure Execute; override;
end;




type
TForm1 = class(TForm)
Button1: TButton;
pb: TProgressBar;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
procedure mythread.doprogress;
var i:integer;
begin
for i:=1 to 10 do
form1.pb.StepIt;
end;
procedure mythread.Execute;
begin
Synchronize(doProgress);

Exit;

end;

{$R *.dfm}

shervin farzin
جمعه 04 مرداد 1387, 01:04 صبح
سلام
آقا چطور ميشه فهميد كار يك Thread تموم شده يا نه ؟
ممنون ميشم راهنماييم كنين .

vcldeveloper
جمعه 04 مرداد 1387, 02:14 صبح
می تونید یا از خصوصیت Terminated استفاده کنید، یا تابع GetExitCodeThread را اجرا کنید. تابع GetExitCodeThread وضعیت توقف Thread را مشخص میکنه، اگر هنوز متوقف نشده باشه، مقدار STILL_ACTIVE را بر می گرداند.

shervin farzin
جمعه 04 مرداد 1387, 04:05 صبح
آقا يه سوال ديگه . اگه من توي برنامم در دلفي هيچ thread رو تعريف نكنم به طور پيش فرض تمام كد برنامه در غالب يك thread اجراء ميشه ، حالا اگه من فقط يك thread بسازم آيا باز هم برنامه با همين thread جديد فقط كار ميكنه يا در كل هنگام اجراء دوتا thread داريم .

B-Vedadian
جمعه 04 مرداد 1387, 11:59 صبح
هيچ تردي با اضافه کردن ترد جديد از بين نميره.

shervin farzin
شنبه 05 مرداد 1387, 11:42 صبح
سلام

ممكنه بفرماييد كه آيا فرقي ميكنه thread رو كه تعريف ميكنين چه processe رو بهش اختصاص بدين ، به عنوان مثال يه حلقه براي كار با فايلها ويندوز يا يه select از database .
اينو ميپرسم چون من يه برنامه براي كپي كرد فايلها ديدم كه خيلي خوب عمل ميكرد ولي وقتي سعي كردم يه برنامه براي خوندن اطلاعات از database ، كه البته دقيقا مثل برنامه فايلها بود بنويسم اصلا اوني نشد كه ميخواستم . يعني با اجراء thread تمام عناصر interface تا زماني كه جواب select نياد غير فعال هستن ، در ضمن از application.ProcessMessages هم استفاده كردم ولي كمكي نكرد .

B-Vedadian
شنبه 05 مرداد 1387, 17:45 عصر
فرقي نميکنه توي ترد چه بکني، تنها نکته اينه که به حافظه مشترک بين چند ترد با احتياط کار کن (اصطلاح thread safe رو جستجو کن). فقط حجم پردازش رو کنترل کن، مثلا با قرار دادن sleep.

در مورد توضيح شما، چيزي متوجه نشدم. غير فعال بودن انترفيس چه ربطي به database داره؟