Thread hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
goabdullah
Üye
Mesajlar: 17
Kayıt: 23 Eyl 2015 12:43

Thread hakkında

Mesaj gönderen goabdullah »

Merhaba Arkadaşlar,

Şöyle bir yapım var

AnaThread altında
if x=1 then
1. thread
end
else
2. thread
end;


Yani ana thread içinde belli koşullar sağlandığında 1. thread aksi takdirde 2. thread çalışmaktadır. Bu mantık doğrumudur. Threadler arasında bir iç içe çalışmaları dışında bir bağlantı olmamasına rağmen yanlış bir kullanımım söz konusu mu dur.

Bir de bir thread execute edildiğinde terminate olana dek içindeki kod çalışır mı ? (Timer mantığı gibi)

Kolay gelsin
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Thread hakkında

Mesaj gönderen G.Arkas »

Kodlarını görmediğim için çok detaylı bir bilgi paylaşımı yapamayacağım ancak neden 2 ve 3. threadlar var. Tek thread içindeki execute içerisinde if bloğu tanımlayamaz mısın?
ir de bir thread execute edildiğinde terminate olana dek içindeki kod çalışır mı ? (Timer mantığı gibi)
Execute içeriğine göre değişir. İçerisinde bir döngü ya da repeat-until gibi bir şeyler varsa olur tabii. Aksi halde görevini tamamlar ve bir daha çalışmaz.
Resim
goabdullah
Üye
Mesajlar: 17
Kayıt: 23 Eyl 2015 12:43

Re: Thread hakkında

Mesaj gönderen goabdullah »

Ana thread içinde kontrol edilmesi gereken koşullar var. Bu koşulların durumuna göre aynı anda farklı işleri yapsınlar diye 2. ve 3. threadlar var.
Aslında Ana thread içinde if bloğu var. Makaleleri okumama rağmen iç içe kullandığımızda sorun yaşarmıyım kısmında kafam karıştı..
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Thread hakkında

Mesaj gönderen sabanakman »

Bence bunlar sorulmaz, bir köşeye çekilip denemeler yanılmalarla aranan cevaplara ulaşılabilecek meseleler bunlar hep :wink: .
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Thread hakkında

Mesaj gönderen anonymousdelphicoder »

Tek threadla halledilir Tevent kullanmaniz gerekir kisacasi waitfor ile infinite kadsr bekleyip bir degiskene deger atayip sonra eventi set edip kapiyi acmaniz ve verdiginiz degiskene gore sart kosturup gerekli proseduru isletin kapiyi acip if e dallanip asil proseduru cagirmadan once eventi resetleyip kapiyi kapatmaniz lazim. Execute icerisinde sonsuz dongu while not terminated do ...
Yazip executeyi canli tutmaniz lazim.

Mobilim yoksa kod yazip verecektim :)
Kolay gelsin.
goabdullah
Üye
Mesajlar: 17
Kayıt: 23 Eyl 2015 12:43

Re: Thread hakkında

Mesaj gönderen goabdullah »

Cevaplarınız için teşekkür ederim.

Boş vaktinizde bizim için öğrenmemize yardımcı olması amacıyla bir kod yazabilir misiniz

Saygılarımla..
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: Thread hakkında

Mesaj gönderen anonymousdelphicoder »

Yarın yazarım inşAllah.

Kolay gelsin.
goabdullah
Üye
Mesajlar: 17
Kayıt: 23 Eyl 2015 12:43

Re: Thread hakkında

Mesaj gönderen goabdullah »

Bekliyoruz. Tekrar teşekkürler.
goabdullah
Üye
Mesajlar: 17
Kayıt: 23 Eyl 2015 12:43

Re: Thread hakkında

Mesaj gönderen goabdullah »

Vaktiniz olmadı herhalde;
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Thread hakkında

Mesaj gönderen sabanakman »

İlk sorudan bu güne kadar geçen 6 günlük sürede sıkı bir ar-ge çalışması yapmış olsaydınız konuda sorulacak en ağır sorulara cevap verecek kadar uzmanlaşmış olacaktınız. Yazdıklarım biraz kısa olabilir ama buradan aleyhinizde yazdığım algısına sakın kapılmayın. İnanın muazzam derecede lehinizde sonuç alacağınız tek yol budur.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
goabdullah
Üye
Mesajlar: 17
Kayıt: 23 Eyl 2015 12:43

Re: Thread hakkında

Mesaj gönderen goabdullah »

Bu sadece benim için değil diğer arkadaşlarımız içinde faydalı olabilecek bir konu. O yüzden bende konu üzerinde araştırmalarıma devam ediyorum test yapıyorum. Birilerin konu hakkında cevap yazması için beklemiyorum. Cevap yazacak arkadaşların yazacakları bir cevap varsa özelden değilde buradan yazmasının herkes için daha paylaşımcı bir yaklaşım olacağı düşüncesindeyim.

saygılarımla.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Thread hakkında

Mesaj gönderen Kuri_YJ »

Selamlar,

Sabanakman kardeşimiz genel olarak forumu takip eden diğer arkadaşlara da örnek olması açısından bir tavsiyede bulunmuştu. Sizin de yanlış anlamayışınız ve olumlu katkıda bulunmaz da güzel bir davranış oldu. Öncelikle bunu belirterek başlayalım ve Thread'ler konusunda tavsiye edeceğim ve dikkat edilmesi gereken birkaç noktayı belirtmek istiyorum.

Thread kullanımlarında Main thread'i dondurmamaya dikkat edin. Eğer main Thread'i dondurursanız programınız durduk yere kilitlenir. Ardından Thread kullanımlarında elden geldiğince her thread kendi içindeki Local Değişkenleri kullanmalı. Global değişkenlere erişim sırasında hata alabilirsiniz. Çünkü bir bellek bölgesindeki değişkendeki değeri bir Thread okumaya çalışırken diğeri yazmaya kalkarsa burada program kırılır. Veya benzeri ters durumda aynı anda iki farklı thread bir global değişkene aynı anda erişmeye kalkarsa Threadleriniz kırılır ve hata alırsınız. Thread safe diye bahsedilen yapılarda oluşturulan mantıklar, hiç bir thread'in, bir başka thread'i etkilemesi söz konusu değildir ve yukarıda bahsettiğim genel kurallar gözetilerek yazılır. Bunun dışında dikkat edilmesi gereken bir iki nokta daha var. Bunlar da Global değişkenlere erişimde veya bir Listeye veya herhangi ortak kullanılan bir şeye erişim gerektirdiğinde bu erişilecek şeyin öncesinde threadinizin bir şekilde o nesneyi LOCK etmesi veya Thread Processlerini bir Critical section ile erişime durdurması/beklemeye alması ve işini gördükten sonra da serbest bırakması (UnLock, CrtircalSection.Leave gibi.) gerekmektedir. Çünkü programlarda illa ki karşınıza global bir nesnenin veya değişkenin kullanımı gerekecektir. Bir de ana thread ile senkronize birşeyler yapmanız gerekebilir bu durumda da Synchronize kullanmanız gerekecektir.

Bu bahsettiğim şeylere dikkat ederseniz Thread'lerde rahat edersiniz aksi halde hem Trace/Debug etmesi zordur hem de rastgele şekilde çalışan threadlerde sorun çözmeniz zor olur.

Size biraz Critical Section ve Multi Threadig ile ilgili birkaç bağlantı paylaşayım. Bunları okuyup incelerseniz bilgiler daha da oturacaktır.

http://edn.embarcadero.com/article/22411

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

http://forum.codecall.net/topic/70827-v ... threading/

http://delphi.about.com/od/kbthread/

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Thread hakkında

Mesaj gönderen sabanakman »

Ayrıca "Derinlemesine Thread" hazineleri de çok gizli saklı bir yerde değil, orta yerde öylece ihtiyaç sahiplerini beklemektedir :mrgreen:
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: Thread hakkında

Mesaj gönderen varyemez »

Hazır yeri gelmişken ve Adnan hocamızı da yakalamışken Thread konusunda bir iki toplantı yapalım mı , ne dersiniz?
goabdullah
Üye
Mesajlar: 17
Kayıt: 23 Eyl 2015 12:43

Re: Thread hakkında

Mesaj gönderen goabdullah »

Arkadaşlar bilgilendirmeleriniz için hepinize teşekkür ederim.

Saygılarımla..
Cevapla