2008-11-07 11 views

cevap

6

Herhangi bir kodu denemeyi ve yazmayı denemeyeceğim. Sadece bu eğiticiye bakın. Biraz eski ama çok iyi bir imho.Multithreading - The Delphi Way

+0

Teşekkür ederiz. Kodgear'ın kendi sitesinin bile yanlış (eski) bir adresi vardır. – delphist

+0

evet, öğretici biraz hareket etti! – Steve

+0

Eğiticinin bağlantısı için teşekkürler. – samir105

6

İş parçacığınızda bir ileti döngüsü (muhtemelen gizli bir bildirim penceresiyle) olabilir ve ona bir Windows iletisi gönderebilirsiniz veya bunu yapmak için daha yerel (daha az GUI) bir yol kullanabilirsiniz. İş parçacığının beklediği ve gönderme iş parçacığının işaret ettiği bir el ile sıfırlama olayıyla birlikte bir kritik bölüm tarafından korunan bir sıra olarak.

Daha genel bir çözüm, bir üretici-tüketici kuyruğudur; klasik uygulamada, tüketicileri ve üreticileri takip etmek için birkaç semafor ve sıraya özel erişim için üçüncü bir semafor kullanılır; Bununla birlikte, nette daha optimal üretici-tüketici sıraları mevcuttur.

+4

Ve unutmayın, çocuklar: Performans kullanmıyorsanız, Senkronize etmeyin(). :) –

+0

Daha fazlasına katılmadım. Bu bir yorum yerine bir cevap olsaydı, oy vermiş olurdum. TThread'in dozu ve dontları hakkında hoş bir rant için bkz. Http://newsgroups.cryer.info/borland/public.delphi.internet.winsock/200507/0507273541.html – mghie

3

Neden yapmalısınız? Bu sadece ikincil bir iş parçacığında bir ileti döngüsü oluşturmak zorunda kaldım tek nedeni, ve iş parçacığı COM nesneleri kullandığını çünkü. Oleınitialize yapılan çağrılar() ve OleUnitialize() bir işareti ihtiyaç standart GetMessage() döngü vardır. Bu durumda, PostThreadMessage() kullanarak, yalnızca bu ileti dizisine ileti göndermeniz gerekir, çünkü normal engelleme senkronizasyon çağrıları mesaj döngüsünü etkileyebilir. Aksi takdirde, sadece yapmayın.

Eğer Delphi 2007 veya 2009'daysanız, Primož Gabrijelčič tarafından OmniThreadLibrary'a baktığınızdan emin olun, bu sizin işinizi daha kolay hale getirmelidir.

+0

Neden bunu yapmalısınız? Örneğin, her 1000 msn bir sunucudan olayları yoklama bir iş parçacığım var ama yoklama oranını 5000msec olarak değiştirmem gerekiyor. Durdurmak ve daha sonra bu amaç için tekrar başlatmak çok fazladır. – grinner

+0

@tdiop: Bunu başarmak için ileti dizisine gönderilecek bir mesajın gönderilmesi gerekmiyor, bunun için daha birçok başka yol var. İlham için diğer cevapları kontrol edin. – mghie

İlgili konular