Bu nasıl Bir Thread Örneği Anlamadım....

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Bu nasıl Bir Thread Örneği Anlamadım....

Mesaj gönderen tuanna »

C:\Program Files\Borland\Delphi7\Demos\Threads

Borland bu örnekle sanki sort örneği vermiş gibi

Bu karışık bir konuyu bu kadar karışık anlatılabilirdi...

Bu örneği Açıklayabilecek arkadaş varmı acaba?
Siz hayal edin...Biz yapalım TuannaSoft...
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Örneğe göre sıralamalar aynı anda başlıyor ve bitişi sıralamaya göre bitiyor. :D. Pek anlamam ama, bu iş için sadece THRead temel sınıftan türetilen kendine ait sınıflar kullanman gerekiyor o kadar. Önemli olan bazı metotları kendine göre hazırlamalısın, ve VCL'e kanallardan erişmeye çalışmamalısın.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

Bir süredir bunu araştırıyorum...
Evet thread ile bazı seyleri yapıyorum ben
ama sorun şu profesyonel olarak öğrenmek istiyorum delphinin örneği çok karışık o örneği çözen zaten kendisi thread felan çoktan yazar...
Siz hayal edin...Biz yapalım TuannaSoft...
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Kod: Tümünü seç

ype
  TmyThread=class(TThread)
    procedure Execute;override;
    procedure islem;
  end;

var Kanal:TmyThread;

procedure TmyThread.Execute;
begin
  while not Terminated do islem;
end;

procedure TmyThread.islem;
begin
  //Yoğun çalışacak kodlar
end;
en temel kanal tanımlama biçimidir. Mesela kanalınızın program beklemeye geçtiği anda araya girmesini istiyorsanız o zaman Synchronize metodunu kullanmanız gerekiyor.

Kod: Tümünü seç

procedure TmyThread.Execute;
begin
  while not Terminated do Synchronize(islem);
end;
o zaman bu kodlar .exe meşgul değilken sanki ana .exe içinden çalışıyormuş gibi davranacaktır. Synchronize kısmına kafanı fazla yorma ilk örnek sana yetecektir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

peki

kanallarımı dinamik yaapmak ve Her Kanalın Aynı nesnelere ulaşması ve bunların vcl olduğunu düşünürsek nasıl bir model çizilmeli sizce
Siz hayal edin...Biz yapalım TuannaSoft...
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Eğer kanallar (THREAD) ortak değerlere ulaşması durumnda kanal içinde kritik bölgeler oluşturarak bu bölgelerde ortak değişkenlere erişim yapılabilir.

Böylelikle kanallar aynı değişkeni değiştirme esnasında (okuma için gerekmiyor - gerekmeyebilir) çakışma yaşamazlar.

THread olayı gerçekten çok faydalı ama çokta zor bir konu diyebilirim. Başlangıçta bir kaç denemeden sonra mantığını anladığımızda, ilk başlara göre daha net anlıyacaksınız.

Bana göre hemen her programda kullanılması gerekn bir işlevdir. Teorik olarak Türkiye'de program yazan kişiler, bilgisayarı sadece kendileri çalıştığı varsayarak program yazıyorlar. Oysa kendi yazdıkları program ile beraber diğer başka programlarda çalışmaktadır. Bu nedenle bilgisayarda çalışan programların eşit olarak kaynakları kullanması, işletim sistemine barışı getirecektir.

Yoğun raporlama, arama ve kayıt sırsında THREAD kullanılması mümkündür. Ve faydalıda olacaktır.

THREAD'larda en sık başınıza gelecek sorunlardan birkaçı, hafıza taşmaları ve hata ayıklama işlevleri olacaktır.

Şöyle bir drama yazayım. Kanalları izah etmek ve kanal teorisi dışında işlev yapan programlara örnek. Gerçek hayata uygulayarak anlatmaya çalışayım.

Kod: Tümünü seç

Siz iş çıkışı çocuğunuzu okuldan alıyorsunuz. Elinizde iş çantnız var. İçinde iş için gerekli evrak olduğunu var sayalım. Ayrıca çocuğunuzun çantasıda elinizde. Çocuğu okuldan aldıktan sonra ona bir mağazadan pahalı bir ayakkıbıda alıyorsunuz. Çünkü maaşınızı henüz aldınız ve çocuğunuza bir sözünüz vardı.

Eve dönüş yolunda çocuğunuz bir parkta oyun oynamak istiyor ve sizde kabul ediyorsunuz. Bir parka gidip uygun bir bank bulup oturuyor ve çocuğunuzda salıncak ve kaydıraklarda eğlenmeye başlıyor. 

Çocuğunuza uzaklığınız kabul edilebilr bir uzaklıkta. Bri sorun olduğunda yetişmeniz 3-5 saniyenizi alacaktır. Herşey yolundadır. 

Bu arada çantanızı ve diğer eşyaları bankın boş yerine koyuyorsunuz. Çantadan çıkarttığınız gazeteyi okumaya başlıyorsunuz. 

Şu an için herşey yolunda. Ama (bir kanal oluşturup) arada bir göz ucuyla çocuğunuzu kontro ediyorsunuz. Bunu hem gazete okumanızı engellemeyecek hem de çocuğu riske sokmayacak şekilde yapıyorsunuz. Heşey yolunda. Sistem düzgün çalışıyor.

Siz kurduğunuz sisteme güveniyorsunuz. Ama hesapta olmayan bir şeyler olacak birazdan. Ve sistem kararsız duruma gelecek.

O sıra banka doğru bir tinerci geliyor (sistem kuralları dışı çalışan bir program). Sizden para istiyor, elbette hiç beklemediğiniz bir anda, bu olayda tedirgin olmaya başlıyorsunuz. İlk olarak önemsiz olan gazete okuma işini yarıda kesip, tinerci ve çocuğunuza odaklanıyorsunuz. Artık gazete okuma işlevini yapmadığınız için bilgi akışı durdu. Tinerci ısrarla sizden para istiyor. Siz tinercilerin neler yapabileceğiniz konusunda endişeleriniz olduğu için ilk etapta agresif davranmıyor, onu başınızdan savmak için gitmesini istiyorsunuz. Tam o esnada, çocuğunuz sallanmakta olan salıncaktan düşüyor. 

İlginizi otomatikman çok önemli olan görevinize veriyor ve çocuğ adoğru hamle yapmak istiyorsunuz. Ancak o esnada tinerci kolunuzdan tutuyor. Sizi bir kaç saniye de olsa işinizden alıkoyuyor.

Şimdi bank üstündeki çantaların ve çocuğun güvenliği gibi iki önemli işiniz var. Elbette çocuk daha önemli ama bank üstündeki çantaların da haybeye bir tinerci tarafından çalınmasınıda istemiyorsunuz. Üstelik çocuğunuza söz verdiğiniz bir ayakkabıyı aldığınız bir günde.

Sistem iyice karamsarlaşıyor. Bir an için en iyi çözümü bulmak için sistem kuralları dışında çalışan bu tinerciyi bertaraf etmenin yoluna bakıyor.

Tinerciye kafa atıp, onu anlık olrak etkisiz hale getirip, derhal çocuğu yerden kaldırıp, banka geri gelmeniz mümkün, ama geri geldiğinizde sinirli tinercinin tepkisinin ne olacağınıda bilmiyorsunuz.

Tinerciye, cebinizdeki rastgele bir parayı vererek de başınızdan savabilirsiniz

Ya da her ne olursa olsun, yeterki çocuğum zarar görmesin diyerek doğruca çocuğunuzada yönelebilirsiniz.

Bu düşünceler işte sizi yavaşlatıyor. Kanal teorisi falan hikaye oluyor. Çünkü siz ne kadarda iyi bir sistem kursanızda bir şeyler ters gidebiliyor. 
Doğru mu bu?

HAYIR.

Başa dönecek olursak. Çocuğun parka gitme isteğini red edip, doğruca eve giderek, daha güvenli bir gün geçirmek mümkündü. Hem akşam olmak üzereyken parka gitmenin bir alemi yoktu.

Ya da çocuğu park yerine bir hamburgerciye götürmeyi ikna etmekte mümkündü. Daha güvenli olma açısından.

Bu uzar gider.


Şimdi bunları yazdım,. Çünkü, gerçek hayatta KANAL sistemine ve sistemin kararsızlaşması durumuna örnek vermek istedim. Bilgisayar programlarıda aslında gerçek hayattaki gibi bir takım verilere göre çalışır. Ortam ve veilrer farklı olabilir. Ama karar verme mekanizması insani yapım olan programlarda yine aynıdır.

THREAD bir program için iyi bir yöntemdir. Her şeyi THREAD içine koymak gerekmeyebilir. Ama THREAD kullandığınızda, aklınızın bir köşesinde, yeni yazacağınız fonksiyon işlerken, bir yandan da THREAD'lerinde işleyebileceğini unutmamanız gerekiyor. Çok dikkat isteyecektir.

Umarım, THREAD konusuna farklı bir yaklaşım ile anlattığım bu yazı ile bazı şeyleri daha iyi netleştirmişsinizdir.

Saygılar.
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

Re: Bu nasıl Bir Thread Örneği Anlamadım....

Mesaj gönderen mustafasoy »

hocam valla tebrik ederim entresan bir örnek olmuş :)
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Cevapla