thread clone

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

thread clone

Mesaj gönderen bulutsuzluk_35 »

merhabalar
kısaca ...
query 20 kayıt getiriyor.ben bu kayıtları 5er şekilde 4 thread' a dağıtarak,4 te bir zamanda bitirmek istiyorum
dağıtma kısmı sorun yok,thread clonlama gibi birşeye itiyacım var 4 thread ta da aynı kodlar olacak onlara gönderdiğim kayıtları işleyecekler
fikri olan ?

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: thread clone

Mesaj gönderen sadettinpolat »

Kod: Tümünü seç

Class TMyThread = TThread
...
...
end;


var
Thread1,Thread2,Thread3,Thread4:TMyThread;
begin
Thread1:=TMyThread.Create;
Thread2:=TMyThread.Create;
Thread3:=TMyThread.Create;
Thread4:=TMyThread.Create;

Thread1.Dataset:=myDataset;
Thread2.Dataset:=myDataset;
Thread3.Dataset:=myDataset;
Thread4.Dataset:=myDataset;

Thread1.Resume;
Thread2.Resume;
Thread3.Resume;
Thread4.Resume;

Datasetten okuma islemi CritialSection icinde olursa her thread datasetten sirayla bir kayit okuyup gerekli islemi yapacaktir.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: thread clone

Mesaj gönderen bulutsuzluk_35 »

burada birde şu var thread sayısı dinamik olacak yani kullanıcı 15 derse 15 thread oluşacak ben

new (mythreadvariable) gibi birşey yaptım ama olmadı.yani baştan thread1, thread1 :Tmythread gibi bir şansım yok çünkü dinamik olacak.Bu konuda da yardımcı olabilirseniz konu tadından yenmeyecek :)

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: thread clone

Mesaj gönderen SimaWB »

Sadettin Beyin yazdığı gibi istediğiniz sayıda Thread oluştururken Thread'lerin OnTerminate olayını tek bir procedure ile kontrol edin. O procedure içerisinde de Thread sayınızı azaltabilirsiniz. Örnek;

Kod: Tümünü seç

ThreadsCount := 3;

with TYourThread.Create(....) do
  OnTerminate = ThreadTerminate;
with TYourThread.Create(....) do
  OnTerminate = ThreadTerminate;
with TYourThread.Create(....) do
  OnTerminate = ThreadTerminate;

procedure TForm1.ThreadTerminate(Sender: TObject);
begin
   Dec(ThreadsCount);
   if ThreadsCount= 0 then
     //Tüm threadler işlemlerini bitirdi
end;
There's no place like 127.0.0.1
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: thread clone

Mesaj gönderen sadettinpolat »

bulutsuzluk_35 yazdı:burada birde şu var thread sayısı dinamik olacak yani kullanıcı 15 derse 15 thread oluşacak ben

new (mythreadvariable) gibi birşey yaptım ama olmadı.yani baştan thread1, thread1 :Tmythread gibi bir şansım yok çünkü dinamik olacak.Bu konuda da yardımcı olabilirseniz konu tadından yenmeyecek :)
threadlerin freeontermiante ozelligi mevcut. thread islemi bitirdiginde kendi kendini yok edebiliyor.

dongu seklinde thredleri olusturup kosturabilirsiniz ya da SimaWB' in dedigi gibi OnTerminate olayina bir metod baglayip bu islemi elle de yapabilirsiniz.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla