Delphi Can
TThread.Synchronize çalışmama sorunu - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: TThread.Synchronize çalışmama sorunu (/showthread.php?tid=7462)



TThread.Synchronize çalışmama sorunu - muratmutlu - 06-10-2023

Merhaba. 

Bizim bir programımız var. Bu programda her modül kendi ekran dizaynını yapıp hazırlıyor ve ana programda bunları gerekli yerlerde dllden yükleyerek gösteriyoruz. Buraya kadar herhangi bir sorun yaşamadım ancak şöyle bir sorunla karşılaştım:

  TThread.CreateAnonymousThread(
 procedure
 begin
   TThread.Sleep(1000);

   TThread.Synchronize(nil,
     procedure
     begin
       Button1.Caption := Random(1000).ToString;
     end);
 end).Start;

Yukarıdaki kod herhangi bir exe de çalışırken dll kısmında ise sadece Synchronize ye kadar olan kısım çalışıyor fakat Synchronize inin içindeki kod çalışmıyor. İşin garibi debug ettiğim zaman TThread.Synchronize satırına geliyor ama içine bir türlü girmiyor. Bu sorunu çözmek için TThread.Synchronize yerine TThread.Queue denedim olmadı, TTask denedim yine olmadı. Burada Synchronize nin içindeki kodun bir önemi yok. Oradaki kodu değiştirsek bile hata da vermiyor ama çalışmıyor da.

Thread ler konusuna çok hakim değilim. Acaba nerede hata yapıyor olabilirim ?


Cvp: TThread.Synchronize çalışmama sorunu - cinarbil - 06-10-2023

(06-10-2023, Saat: 16:31)muratmutlu Adlı Kullanıcıdan Alıntı: Merhaba. 

Bizim bir programımız var. Bu programda her modül kendi ekran dizaynını yapıp hazırlıyor ve ana programda bunları gerekli yerlerde dllden yükleyerek gösteriyoruz. Buraya kadar herhangi bir sorun yaşamadım ancak şöyle bir sorunla karşılaştım:

  TThread.CreateAnonymousThread(
 procedure
 begin
   TThread.Sleep(1000);

   TThread.Synchronize(nil,
     procedure
     begin
       Button1.Caption := Random(1000).ToString;
     end);
 end).Start;

Yukarıdaki kod herhangi bir exe de çalışırken dll kısmında ise sadece Synchronize ye kadar olan kısım çalışıyor fakat Synchronize inin içindeki kod çalışmıyor. İşin garibi debug ettiğim zaman TThread.Synchronize satırına geliyor ama içine bir türlü girmiyor. Bu sorunu çözmek için TThread.Synchronize yerine TThread.Queue denedim olmadı, TTask denedim yine olmadı. Burada Synchronize nin içindeki kodun bir önemi yok. Oradaki kodu değiştirsek bile hata da vermiyor ama çalışmıyor da.

Thread ler konusuna çok hakim değilim. Acaba nerede hata yapıyor olabilirim ?
Tuğrul beyin bu konuda makalesi var
http://www.tugrulhelvaci.com/?p=126 
incelemenizde fayda olabilir.


TThread.Synchronize çalışmama sorunu - yhackup - 10-10-2023

TThread.Queue olması lazım aslında çok sık kullanırım.

(10-10-2023, Saat: 09:32)yhackup Adlı Kullanıcıdan Alıntı: TThread.Queue olması lazım aslında çok sık kullanırım.

Doğru çalışıyor.


TThread.Synchronize çalışmama sorunu - Tuğrul HELVACI - 10-10-2023

Mümkün mertebe TThread.Synchronize kullanmayın; onun yerine TThread.Queue kullanın. Aksi taktirde, deadlock'a yakalanmanız olasıdır. Detaylarını başka post'larda verdiğim için burada detayına girmiyorum.