Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Timer İçerisinde Thread
#1
Veya bir başka deyişle Thread içinde Thread,

Android tarafında arka planda belirli bir süre tekrarlanan veya arkaplanda başlayıp bitmesini istediğim bir kod var ise AsyncTask kullanıyorum,

Görsel Componetlere dokunmadığınız sürece ilgili işlem içerisinde top koşturulabiliyor, AsyncTask içerisinde onlarca yeni AsyncTask işlemi başlatabilmem mümkün.

Delphi tarafında bu konularda pek bilgim yok, Timer içerisinde thread oluşturduğumda uygulama saçmalamaya başlıyor :Smileiz olsanız en kolay hangi yolu seçerdiniz.
WWW
Cevapla
#2
Bir pencereye sahip olmayan uygulamalarda, TTimer kullanmak uygun değildir. Çünkü TTimer özellik olarak pencere'ye WM_TIMER mesajının gönderilmesi ve bunun işlenmesi yolu ile çalışır. Bunun yerine Timer gibi davranabilecek bir çok seçenek kullanılabilir. Örneğin CreateWaitableTimer ve SetWaitableTimer API'leri kullanılabilir. Ya da çok daha basit olarak, bir dummy thread oluşturursunuz bu thread sonlanmadığı müddetçe bir döngüye girer ve döngü içinde SleepEx ile alertable vaziyette istediğiniz interval'de bekler.

SleepEx ve alertable önemli tabii. Bu konular sizi QueueUserAPC'ye götürür. Bu hususlarla alakalı daha önce yazmıştım.

Thread'lerin saçmaladığı noktalar genelde senkronizasyona ihtiyaç olan noktalardır. Kısaca senkronizasyon, kaynakların efektif kullanılması için bir araçtır. Amiyane bir benzetme ile; bir tuvalette 4 kabin var ise, aynı anda sadece 4 kişi tuvalet ihtiyacını giderebilecek demektir. 5nci, 6ncı ... kişiler beklemek zorundadırlar. Ancak, senkronizasyona saygı gösterilmez ise; bu durumda 4 kabine 8 kişi de sığmaya çalışabilir. Elbette, bunun sonucu tahmin edilemez Wink

Kısaca Thread'lerde saçmalık olarak tabir edilebilecek hususlar, bu tarz durumlara özen gösterilmediği için gerçekleşir. Bu nedenle, Critical Section, Mutex, Event, Semaphore ... gibi senkronizasyon nesneleri hakkında fikir sahibi olmak elbette çok faydalıdır.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
Zaman buldukça Threadlar üzerinde geziniyorum bakalım. ya batarız ya çıkarız :d



WWW
Cevapla
#4
(14-12-2017, Saat: 13:48)yhackup Adlı Kullanıcıdan Alıntı: Zaman buldukça Threadlar üzerinde geziniyorum bakalım. ya batarız ya çıkarız :d




Bence çıkarsın Wink
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#5
Smile Abi normal VCL uygulamasında sorun yok Fakat Soap Servisi içerisinde kullanamıyorum.

Serviste Rasgtele her defasında farklı yerde bu hata dönüyor.
ReceiveHeader: Net packets out of order: received[48], expected[1]

Yanlış biliyorsam düzeltin, Soap servise her istek geldiğinde ilgili fonksiyon yeni bir thread olarak oluşuyor, Benim threadım bunu blokluyor ve bu sebepten paketler bozuluyor olabilir mi ?
WWW
Cevapla
#6
(14-12-2017, Saat: 14:27)yhackup Adlı Kullanıcıdan Alıntı: Smile  Abi normal VCL uygulamasında sorun yok Fakat Soap Servisi içerisinde kullanamıyorum.

Serviste Rasgtele her defasında farklı yerde bu hata dönüyor.
ReceiveHeader: Net packets out of order: received[48], expected[1]

Yanlış biliyorsam düzeltin, Soap servise her istek geldiğinde ilgili fonksiyon yeni bir thread olarak oluşuyor, Benim threadım bunu blokluyor ve bu sebepten paketler bozuluyor olabilir mi ?

Birden fazla thread'in olduğu ve bu thread'lerin ulaşabilecekleri uzaklıkta enfes bir sofra olduğu müddetçe; her şey mümkündür. Sofra bir tane, sandalye bir tane; aç thread birden fazla Big Grin

Kodun tamamını görmeden kesin bir şey söylemek zor.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#7
(14-12-2017, Saat: 13:29)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Thread'lerin saçmaladığı noktalar genelde senkronizasyona ihtiyaç olan noktalardır. Kısaca senkronizasyon, kaynakların efektif kullanılması için bir araçtır. Amiyane bir benzetme ile; bir tuvalette 4 kabin var ise, aynı anda sadece 4 kişi tuvalet ihtiyacını giderebilecek demektir. 5nci, 6ncı ... kişiler beklemek zorundadırlar. Ancak, senkronizasyona saygı gösterilmez ise; bu durumda 4 kabine 8 kişi de sığmaya çalışabilir. Elbette, bunun sonucu tahmin edilemez Wink

Bu benzetmeyi okuyunca gözümden yaş geldi Smile
XXXXlıların tuvalet sistemi kullanılırsa problem çıkma ihtimali hayli azalır Smile
Cevapla
#8
(14-12-2017, Saat: 17:13)frmman Adlı Kullanıcıdan Alıntı:
(14-12-2017, Saat: 13:29)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Thread'lerin saçmaladığı noktalar genelde senkronizasyona ihtiyaç olan noktalardır. Kısaca senkronizasyon, kaynakların efektif kullanılması için bir araçtır. Amiyane bir benzetme ile; bir tuvalette 4 kabin var ise, aynı anda sadece 4 kişi tuvalet ihtiyacını giderebilecek demektir. 5nci, 6ncı ... kişiler beklemek zorundadırlar. Ancak, senkronizasyona saygı gösterilmez ise; bu durumda 4 kabine 8 kişi de sığmaya çalışabilir. Elbette, bunun sonucu tahmin edilemez Wink

Bu benzetmeyi okuyunca gözümden yaş geldi Smile
XXXXlıların tuvalet sistemi kullanılırsa problem çıkma ihtimali hayli azalır Smile

Smile
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#9
(14-12-2017, Saat: 14:27)yhackup Adlı Kullanıcıdan Alıntı: Smile  Abi normal VCL uygulamasında sorun yok Fakat Soap Servisi içerisinde kullanamıyorum.

Serviste Rasgtele her defasında farklı yerde bu hata dönüyor.
ReceiveHeader: Net packets out of order: received[48], expected[1]

Yanlış biliyorsam düzeltin, Soap servise her istek geldiğinde ilgili fonksiyon yeni bir thread olarak oluşuyor, Benim threadım bunu blokluyor ve bu sebepten paketler bozuluyor olabilir mi ?

Aylar sonra kendi yaptığım hatayı farkettim Smile

Yukarıdaki hatanın nedeni Thread içerisinden rodoslama vcl komponetine daldığım için , o zamanlar Queue bilmiyor muşuz Smile
WWW
Cevapla
#10
(14-08-2018, Saat: 10:27)yhackup Adlı Kullanıcıdan Alıntı:
(14-12-2017, Saat: 14:27)yhackup Adlı Kullanıcıdan Alıntı: Smile  Abi normal VCL uygulamasında sorun yok Fakat Soap Servisi içerisinde kullanamıyorum.

Serviste Rasgtele her defasında farklı yerde bu hata dönüyor.
ReceiveHeader: Net packets out of order: received[48], expected[1]

Yanlış biliyorsam düzeltin, Soap servise her istek geldiğinde ilgili fonksiyon yeni bir thread olarak oluşuyor, Benim threadım bunu blokluyor ve bu sebepten paketler bozuluyor olabilir mi ?

Aylar sonra kendi yaptığım hatayı farkettim Smile

Yukarıdaki hatanın nedeni Thread içerisinden rodoslama vcl komponetine daldığım için , o zamanlar Queue bilmiyor muşuz Smile

Şimdi biliyorsun elhamdülillah Smile
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
  DLL içerisinde FireDac Problemi tecnomaster 1 124 16-03-2024, Saat: 18:05
Son Yorum: delphi.developer
  Thread içinde CoInitialize(nil) ve CoUninitialize serdar 6 1.021 22-08-2023, Saat: 09:50
Son Yorum: yhackup
  Thread Socket (Yardım) hkeskin 1 1.360 11-07-2023, Saat: 12:47
Son Yorum: delphiman
  Memo içerisinde 4 kolonlu tablo tipi string göstermek (String Format) Syntax 4 1.521 05-05-2023, Saat: 11:02
Son Yorum: Bay_Y
  delphi7 de timer sayma suresini labelde gosterme sadikacar60 2 507 11-04-2023, Saat: 23:55
Son Yorum: delphi.developer



Konuyu Okuyanlar: 1 Ziyaretçi