2011-03-03 11 views
10

Bir Thread.descendent sınıf yazdım ve bir com olayı dinlemek için sonsuz bir döngü koydum yürütme yönteminde, kötü bir Threading uygulama olarak kabul etmek için sonsuz bir döngü kullanın? uygulamalar iyi çalışıyor, donmuyor ve her zaman cevap veriyor, sadece cevap veriyorum çünkü iş parçacığı için en iyi yöntemi kullanmak istiyorum.TThread.Execute içinde sonsuz bir döngü koymak için kötü bir uygulama olarak kabul edilir mi?

procedure TMyThread.Execute; 
begin 
    while True and not Terminated do 
    begin 
    AResult:= FListener.GetResult(Param1,Param2,5000); 
     if not VarIsNull(AResult) then 
     Synchronize(Process); 
    end; 
end; 
+13

Döngüyü sonlandıran bir olay varsa, gerçekten Sonsuz değil mi? – drudge

+0

FListener.GetResult, etkinlik yoksa bekler mi? –

+0

'TMyThread.Terminate' komutunu kullanmamı engellemek için, iş parçacığı sonlandırılıyorsa, True ve sonlandırılmadı satırını kontrol et. ' – Salvador

cevap

7

Bunu yapmak sorun değil. İyi olan Terminated'u kontrol ediyorsun. Dinleyiciniz buna izin veriyorsa ve CPU kullanımınız çok yüksekse, iş parçacığını bir Uyku (1) yerleştirerek yavaşlatabilirsin, ama gerekli olmayacağını düşünüyorum.

+5

Teknik olarak sorun değilken, bu tamamen gereksiz ve kodu okumayı zorlaştırıyor. @David Heffernan'ın belirttiği gibi, “Gerçek ve Sonlandırılmadı”, “Sonlandırılmadı” ve ikinci olarak okunması daha kolaydır. (Gerçi, downvoting değil, çünkü * bu gereksiz ve işe yaramaz olsa bile * teknik olarak Tamam.) –

+1

Evet. 'Doğru' kaldırılabilir. Cevabım, bir iş parçacığında bir süre döngüsünün genel kullanımı hakkındaydı, bu da aslında bu soruyla ilgili. – GolezTrol

+1

Ve dinleyicinin zaman aşımının kendisinin olduğunu görüyorum. Bu, öneriyi gereksiz yere ekstra bir Uyku koymaya zorluyor. – GolezTrol

14

derleyici dönüştürmektedir: Ben bunu son derece doğal görünüyor hemfikir eminim bu hale yazılı

while not Terminated do 

. Bu çok yaygın bir deyim.

İlgili konular