Delphi Can

Orjinalini görmek için tıklayınız: TThread.Synchronize çalışmama sorunu
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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 ?
(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.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.
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.