Synchronize Form Show olayı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Synchronize Form Show olayı

Mesaj gönderen carsoft »

Thread içinden form show olayı doğrusu nasıl olmalı bu şekilde problem olurmu

Kod: Tümünü seç

Procedure TThread.Goster();
begin
   Form1.show;  
end;
cpu % 6 larda iyi

veya bu şekildemi olması lazım

TThread içinden

Kod: Tümünü seç

Synchronize(Goster);

Kod: Tümünü seç

Procedure TThread.Goster();
begin
     Form2.Deneme;
  end;

Form2

Kod: Tümünü seç

procedure TForm2.Deneme();
 begin
    Form1.Show;
 end;
Bu şekilde olunca cpu yavaş yavaş artıyor ve % 100 varıyor.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Synchronize Form Show olayı

Mesaj gönderen Kuri_YJ »

Selamlar,

Thread içinde VCL ve Main Thread ile ilgili bir şey yapacaksanız Elbette Synchronize() ile çağırmalısınız. Yani Form1 diyerek özellikle belirli bir formu çağırıyorsanız. Ancak Kodunuzun tamamını bilmediğim için söylüyorum. Oluşturulan her Thread işi bittiğinde Destroy/Terminate edilmeli. Etmezseniz bellekte ve işlemcide yer işgal edecek ve işlemciye gereksiz yük bindirecektir.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Re: Synchronize Form Show olayı

Mesaj gönderen carsoft »

terminate ediyorum zaten , unit içinde kullanıyorum threat Synchronize() ile Unit içinden Forma gönderiyorum örnek verebilirmisin
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Synchronize Form Show olayı

Mesaj gönderen Kuri_YJ »

Selamlar,

Benim projelerimden bir tane örnek source,

Kod: Tümünü seç

constructor TAskYTSThread.Create(APhoneNumber, AYTSExeName, AYTSPathName : string;
  AReqType : integer);
begin
  inherited Create; // Hemen Çalış
  Self.FreeOnTerminate := True;
  Self.FReqType := AReqType ;
end;

destructor TAskYTSThread.Destroy;
begin
  inherited;
end;

procedure TAskYTSThread.AskYTS;
var
  FYtsTopicName, strMacro : string ;
begin
  FYtsTopicName := LeftStr(FYTSExeName, Length(FYTSExeName)-4);
  case FReqType of
    REQ_TYPE_INFO : begin
	    ...
    end;
    REQ_TYPE_OPEN_FILE : begin
	    ...
    end;
  end;
end;


procedure TAskYTSThread.Execute;
begin
  inherited;
  FDDE_BUSY.Enter ;
  try
    if IsYTSRunning then
    begin
      Synchronize(AskYTS);
    end ;
  finally
    FDDE_BUSY.Leave ;
  end;
end;

Yukarıdaki Thread'de AskYTS denen fonksiyonu çağırıyorum. Yani Thread oluşturuluyor ve Main thread normal işine devam ederken bu oluşturulan Thread de gidip Synchrinize bir biçimde kendi işini yapıyor.

Not : Tüm source'u yollamadım aradan biraz sildim (örnek teşkil etmesi gereken noktaları bıraktım sadece)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Re: Synchronize Form Show olayı

Mesaj gönderen carsoft »

Teşekkürler bu formu çok seviyorum , insanı geliştiriyor.
Cevapla