View Full Version : سوال: اختصاص دادن چند پروسیجر به یک thread
  
Mask
چهارشنبه 10 آذر 1389, 14:03 عصر
با سلام
یک thread به نام mythread ایجاد میکنم. و در پروسیجر مربوطه کدم رو مینویسم.
برنامه اجرا و دستور من رو در پروسیجر مربوطه و در thread  ساخته شده اجرا و free میشه.
چطوری میتونم از همین mythread  که ایجاد کردم.چندین پروسیجر رو فرا خوانی کنم؟
Felony
چهارشنبه 10 آذر 1389, 15:37 عصر
چطوری میتونم از همین mythread که ایجاد کردم.چندین پروسیجر رو فرا خوانی کنم؟
پروسیجر مربوط به کلاس Thread ی هست که ساختید یا نه ؟ در هر صورت :
type
  TMyThread= class(TThread)
    Private
      Procedure Test2;
    Protected
      Procedure Execute; Override;
  end;
Procedure Test1;
begin
  ShowMessage('Test 1');
end;
{ TMyThread }
procedure TMyThread.Execute;
begin
  inherited;
  Test1;
  Test2;
end;
procedure TMyThread.Test2;
begin
  ShowMessage('Test 2');
end;
Mask
چهارشنبه 10 آذر 1389, 23:25 عصر
ممنون.
بله از همین myThread هست که ساختم.
کدتون رو دیدم.
منظورم اینه که تعداد پروسیجر استفاده شده نامحدود باشه.؟
شما با دستور بالا 2 تا پروسیجر رو اختصاص دادید.
میخام محدود نباشم.
Felony
چهارشنبه 10 آذر 1389, 23:35 عصر
چه محدودیتی ؟ محدودیتی وجود نداره ، هر چند تا Procedure میخوای توش صدا بزن !
فقط حواستون باشه که Procedure ها همزمان اجرا نمیشن بلکه به ترتیب اجرا میشن ، یعنی مثلا تو کد پایئن اول روال Test1 اجرا میشه و تا زمانی که کارش تموم نشه Thread در گیر هست و روال Test2 اجرا نمیشه ، وقتی کار روال Test1 تموم شد روند اجرای کد به رویداد Execute بر میگیرده و روال Test2 رو اجرا میکنه :
procedure TMyThread.Execute;
begin
  inherited;
  Test1;
  Test2;
end;
telman
دوشنبه 29 فروردین 1390, 14:26 عصر
چرا اینجا از Inherited استفاده کردید؟
vcldeveloper
دوشنبه 29 فروردین 1390, 20:00 عصر
چرا اینجا از Inherited استفاده کردید؟ 						
Execute متدی از کلاس TThread هست که به این کلاس جدید (TMyThread) به ارث رسیده، و override شده؛ پس میشه در آن inherited را فراخوانی کرد که موجب اجرای متد TThread.Execute میشه؛ اما در اینجا فراخوانی اون لازم نیست، چون TThread.Execute یک متد خالی هست، و کاری انجام نمیده.
چطوری میتونم از همین mythread  که ایجاد کردم.چندین پروسیجر رو فرا خوانی کنم؟ 						
یک Thread فقط یک procedure برای اجرا داره؛ Thread ایی که بخواد کدهای متنوع را از یک منبع بگیره و اجرا کنه، باید مکانیزم مورد نظر را در همون یک Procedure پیاده سازی کنه؛ یعنی در اون Procedure یک حلقه بذاره، در داخل اون حلقه یک صف از procedure ها رو چک کنه، و هر زمان که procedure جدیدی وارد صف شد، اون رو بگیره و اجرا کنه. برای اینکه بتونید همچین ایده ایی رو پیاده سازی کنید، می تونید درباره مسئله producer-consumer در مباحث Threading تحقیق کنید.
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.