Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
TThread.Synchronize çalışmama sorunu
#1
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 ?
Cevapla
#2
(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.
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#3
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.


Ek Dosyalar Resimler
   
WWW
Cevapla
#4
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.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Win 11 ve Delphi 7 Minimize sorunu. enigma 7 495 11-02-2026, Saat: 10:27
Son Yorum: RAD Coder
  Delphi SLL kullanım sorunu Bay_Y 12 1.317 22-12-2025, Saat: 18:11
Son Yorum: Bay_Y
  CxGrid Türkçe karakter sorunu mur93 1 350 12-11-2025, Saat: 09:22
Son Yorum: cinarbil
Exclamation Ftp gönderilen dosyada tr karakter sorunu forumcuali 7 3.460 01-05-2025, Saat: 02:26
Son Yorum: m_ekici
  Java Script ile sayfayı kapatma sorunu MEK 2 1.217 01-03-2025, Saat: 23:16
Son Yorum: mkysoft



Konuyu Okuyanlar: 1 Ziyaretçi