Thread İşleminin Sonlanmasını Beklemek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
DarkEternal
Üye
Mesajlar: 158
Kayıt: 19 Eki 2005 11:00

Thread İşleminin Sonlanmasını Beklemek

Mesaj gönderen DarkEternal »

Kod: Tümünü seç

işlemler1;
işlemler2;
kopyalama; //Thread kullanmak istediğim kısım
işlemler3;
işlemler4;
gibi bir kod bloğum var. Ben kopyalama işleminde thread kullanmak istiyorum, ama thread işlemi bitmeden de işlem3 e geçmek istemiyorum (çünkü sonuca göre yapılıyor zaten sondaki işlemler).

Thread in sonlanmasını nasıl bekleyebilirim?
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

Bu durumda threat kullanmanın pek de bir anlamı kalmıyor aslında.
Ama illa da threat diyorsan; threat biterken ana programa

Kod: Tümünü seç

PostMessage(Form1.Handle, gmesaj, 1, Integer(gidecekmesaj));
yukarıdaki gibi bir komutla mesaj gönderip işlem3 ten devam edersin.
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

TThead sınıfının WaitFor diye bir metodu var onu kullanabilirsin.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

O kanalın içinde kopyalama işleminden sonra kodlarını aynen devam ettir. Yani tüm kodlar kanalın içinde kalsın. Başka bir yol onTerminate olayı tanımlayabilirsin. Ama program kod akış kontrolünü kanaldan ana programa devredeceksen en mantıklısı mesaj göndermek olacak.

Kod: Tümünü seç

const
  WM_KanaldanGeldi=WM_USER+1980;
type
  TForm1=class(TForm)
    .
    .
    .
  private
    procedure WMKanaldanGeldi(var Msg : TMessage);message WM_KanaldanGeldi;
  ...
  end;
.
.
.
procedure TFormAjanda.WMAjanda(var Msg: TMessage);
begin
  islemler3;
  islemler4;
  inherited;
end;
Kodu ile formumuzu tanımlarsak PostMessage(ProgHwnd,WM_KanaldanGeldi,0,0) satırını kanal içinden çalıştırdığımız vakit WMKanaldanGeldi prosedürü çalışacaktır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
DarkEternal
Üye
Mesajlar: 158
Kayıt: 19 Eki 2005 11:00

Mesaj gönderen DarkEternal »

Yardımcı olanlara teşekkürler,
ben şu şekilde çözdüm, paylaşayım dedim...

Kod: Tümünü seç

               ...
               İşlemler1;
               İşlemler2;
               //Thread...
                Thread_Calisiyormu := True;
                Thread.Execute(Self);
                Repeat Application.processmessages until Thread_Calisiyormu  = False;

                if Thread_sonuc = True then
                begin
                  basarili := '1';
                  basarili_adet := basarili_adet + 1;
                end
                else
                begin
                  basarili := '0';
                  basarisiz_adet := basarisiz_adet + 1;
                  sebep := 'İşlem Tamamlanamadı.';
                end;
                İşlemler4;
                ...
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

@DarkEternal en kötü yöntemi seçmişsin.

Delphi yüklü olmadığından Waitfor ne iş yapıyor deneyemedim, helpi de okuyamadım. Yalnız delphi referansını ararken şöyle bir link buldum.

http://www.delphicorner.f9.co.uk/articles/op1.htm

Kod: Tümünü seç

WaitForSingleObject(thread.handle,INFINITE);
Mesajlardan faydalanmak bana hep soğuk gelmiştir. Tabi herkesin stili farklı.

İyi çalışmalar.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Repeat untilde kısır döngüye girer bu sistem.Ek olarak işlem tamamen bitmeden ya da bittikten sonra kestirilemeyen bir gecikmeyle de sonraki adıma geçmesi işten bile değil...
Kullanıcı avatarı
DarkEternal
Üye
Mesajlar: 158
Kayıt: 19 Eki 2005 11:00

Mesaj gönderen DarkEternal »

Şu an sorunsuz çalışıyor gözüküyor, ama dediğiniz gibi her zaman daha iyi bir yöntem mutlaka vardır. Biraz da acil çözmem gereken bir problem olduğundan kestirmeden hallettim fakat WaitFor' uda uygun vaktimde mutlaka deneyeceğim,teşekkürler....
Kullanıcı avatarı
DarkEternal
Üye
Mesajlar: 158
Kayıt: 19 Eki 2005 11:00

Mesaj gönderen DarkEternal »

Evet haklısınız arkadaşlar, işlem uzun sürdükçe kullanılan ram miktarıda çok fazla artıyo ve bilgisayarı çok yavaşlatıyo, sebepte repeatte ki döngü diye düşünüyorum. Daha farklı nasıl bekleme işlemi yaptırabilirim acaba?
Cevapla