Doğru kodlamada bazı önerilere ihtiyacım var:İyi Kodlama? (Çoklu Mesaj Döngüler)
Birden çok seri bağlantının kullanıldığı bir program üzerinde çalışıyorum. Her iletişim hattında bir soyutlama katmanı olarak çalışan bir kontrolör vardır. Kontrolör ve seri port arasında, veriyi paketlere hazır hale getirmek için transfer için hazır bir protokol eklenir. Protokol başarısız teslimatlar ile ilgilenir, yeniden gönderme vb. GUI'nin askıda kalmamasını sağlamak için, her bağlantı hattı (protokol ve seri bağlantı noktası) ayrı bir iş parçacığı üzerinde oluşturulur. Denetleyici, ana iş parçacığı tarafından işlenir, çünkü GUI'de denetimler vardır.
Şu anda, iş parçacığı oluşturduğumda, onlara bir ileti döngüsü oluşturmayı seçtim (Application.Run()), bunun yerine arabellekleri yoklamak ve herhangi bir işin olmaması durumunda, yalnızca iş parçacığı (BeginInvoke) çağırır ve kullanır ileti döngüsü bir arabellek olarak. Bu şu anda güzel çalışıyor ve şu ana kadar ciddi bir sorun yok.
Soruma şimdi bakıyorum: Bu "iyi kodlama" mı, yoksa sırtta bir süre döngü kullanmalı ve bunun yerine tamponlar mı kullanmalıyım ?, yoksa üçüncü bir şey mi?
Kodu göstermek istiyorum, ancak şu ana kadar birkaç bin satırlık kod var, bu nedenle kodun herhangi bir bölümünü görmeniz gerekiyorsa lütfen belirtin. :)
Teşekkür ederiz. Uygulamanız boştayken
Pek yok, hayır. WM_COPYDATA süreçler arasında iletişim kurmak için iyidir. Tek bir süreç içinde ileti dizileri için bunu kullanmak anlamsız. Tampon/blob/herhangi bir nesneyi işaretçiden geçirmeniz çok daha kolay/basittir, örn. * Buffer'ı mesaja göndererek.lParam, PostMessage() 've' diğer ucuna 'geri dönün. –
Windows ileti sıraları, GUI iş parçacıklarının iletilmesi için en uygun hale getirilmiştir. GUI iş parçacıklarından GUI olmayan iş parçacıklarına iletişim için uygun değildir. Basit bir semafor bazlı, optimize edilmemiş üretici-tüketici kuyruğu bile bir WMQ'dan yaklaşık dört kat daha hızlıdır. Çoğu uygulamada, P-C sıra performansı normalde bir sorun değildir. –
Aslında iki noktada da aynı fikirdeyim. WM_COPYDATA düzenleyeceğim; Açıkça düşünmüyordum. Bununla birlikte mesaj sırasına göre, genelleştirilmiş bir olay tabanlı çözümdür. Uygulamasının gereksinimlerine bağlı olarak, diğer modeller daha iyi olabilir. – tenfour