Kendi iş parçacığına (Thread) sahip bileşen.

Başlatan Klein, 11 Aralık 2013, 16:28:33

Klein

TComponent sınıfından  bir komponent türetiyorum.  Bazı fonksiyonları zaman alıcı. Bu yüzden kendi iş parçacığına (thread) sahip olması, ana formdaki diğer nesnelerin çalışmasını etkilememesi gerek.
Application.ProcessMessage kullanmaya sıcak bakmıyorum.  Nesnenin GUI ile işi yok.
Nesneyi TThread sınıfından türetirsem, forma koyamıyorum.  TComponent sınıfından türetirsem, TThread sınıfını nasıl komponentime dahil edeceğimi bilmiyorum.

t2


Klein

#2
Sanırım çözümü buldum.  İyi bir çözüm müdür bilmiyorum?  Daha denemedim.

TThread sınıfından kendi sınıfımızı türetiyoruz.
Thread sınıfımızın  yapılandırıcısını ezip, Komponentimizin sınıfından bir parametre almasını sağlıyoruz.
Sınıfımızda komonentimizin tipinden bir nesne tanımlıyoruz. Bu nesneye yapılandırma esnasında bildirilen nesnenin adresini veriyoruz.

Komponentimizin içinde Thread sınıfından bir nesne tanımlıyoruz.
Komponentimiz yapılandırıldıktan sonra, Thread nesnesini 'Self' anahtar kelimesi ile yapılandırıyoruz.

olemiss

#3
Alıntı yapılan: Klein - 11 Aralık 2013, 16:28:33
TComponent sınıfından  bir komponent türetiyorum.  Bazı fonksiyonları zaman alıcı. Bu yüzden kendi iş parçacığına (thread) sahip olması, ana formdaki diğer nesnelerin çalışmasını etkilememesi gerek.
Application.ProcessMessage kullanmaya sıcak bakmıyorum.  Nesnenin GUI ile işi yok.
Nesneyi TThread sınıfından türetirsem, forma koyamıyorum.  TComponent sınıfından türetirsem, TThread sınıfını nasıl komponentime dahil edeceğimi bilmiyorum.

Thread için iş parçacığı ifadesi gayet güzel olmuş - bu kullanımı nereden buldunuz, sormak isterim.  Teşekkürler.
Yazılım Mühendisi, Çevirmen.

Klein

#4
Alıntı yapılan: sabuncu - 11 Aralık 2013, 19:09:25
Thread için iş parçacığı ifadesi gayet güzel olmuş - bu kullanımı nereden buldunuz, sormak isterim.  Teşekkürler.
Sanırım Vikipedi ya da 'Ceviz Forum' da  görmüştüm ilk.

Bu arada çözüme çok yaklaştığımı hissediyorum. ama çok basit bir yerde takıldım.
Thread sınıfını yukarıda tanımlarsam,  komponentimi tanımıyor, Komponenti yukarıda tanımlarsam, Thread sınıfını tanımıyor.

Sınıf prototipi tanımlamayı bulamadım bir türlü.

İki farklı sınıfın birbirine referans vermesi ( çapraz referans) çok doğru bir yaklaşım gibi gelmiyor bana. Bu konuda fikri olan var mı?

mesaj birleştirme:: 11 Aralık 2013, 19:48:16

@t2  bahsettiğin bileşen benim yapmak istediğim şeyi yapıyor. Ama thread ile bileşan arasındaki haberleşme için windows mesajları kullanılmış.  Bileşenimin Android ve ios platformunda da çalışması gerekiyor. Bu yüzden windows mesajlarını kullanamıyorum. 
Android platformunda mesajlaşma konusunda bilgim yok.

t2

Hazır yapılmışı var,  bunu beğenmediniz mi?

Delphiarea.Com,  backgroundWorker copmonenti var. Öyle çalışıyor.


Threadi kendinden.  Ne iş olsa yapar.



Klein

Yukarıda senin için de bir şeyler yazmıştım.  Bunlara ek olarak, 
Zaten bir komponent yazmaya çalışıyorum.  Belki bu komponentten türetebilirim ama Android elimi kolumu bağlıyor.

engerex


Klein

#8
Hayır. 
Bileşen içerisinde thread kullanmak.  Daha toğrusu kendi thread'i olan , uygulamanın thread'ine eleşmeyen bir bileşen yazmak.
Bileşen oluşturulduğunda, bu bileşen için bir de thread oluşacak.  Bileşenin fonksiyonları  uygulamanın  iş parçacığı yerine kendi iş parçacığını kullanacak. Bileşen forma konulup ayar yapıldığında iş bitecek.
Bileşenin GUI ile işi yok. Muhtemelen senkronizasyon gerekmeyecek.

@t2'nin bahsettiğ bileşende olduğu gibi.

Yukarıda bahsettiğim çözümü halen deneyemedim.  Sınıf prototipi tanımlamayı başaramadım.


engerex

 Basit asenkron multithread bir kod var. İş parçacığını işlemcinin istediğin çekirdeğine atayabiliyorsun. İstediğin kadar oluşturabiliyorsun. Birbirinden bağımsız kullanabiliyorsunuz. Yani bir thread asal sayıları hesaplarken diğeri pi sayısının 1 milyon basamağını hesaplayabilir. Bu esnada kullanıcı bunların farkında olmadan uygulamayı kullanmaya devam edebilir.
İşini görürse bulmaya çalışayım.

Klein

Teşekkür ederim. 
Yukarıda anlattığım şekilde hallettim.