İşte benim sorunum: Bir aygıtın seri üzerinden gönderilip alınabilmesi gerekiyor. Bunun çok iş parçacıklı bir şekilde yapılması gerekiyor. şöyle akışıdır: cihaz içinAygıtlarla Konuşmak İçin Üretici/Tüketici Serially
bekleyin bana bir şey göndermek için - Cihaz bana sonra bir şey, süreç mesajı gönderirse veya boşta, o cihaz ile İnternet'te olmadığını görmek için durumu sorgulamak
, kabul ve bir iş parçacığı almak ve iletmek dişe sahip, Şu anda
gerekli
gibi diğer komutları gerçekleştirmek için cihazı söyle. Alma iş parçacığı, bir bayt için ReadFile (...) aracılığıyla seri bağlantı noktasını denetlemeye devam eden bir süre döngüsüne sahiptir. Eğer bir baytım varsa, arabamı oluşturmaya başlıyorum ve sonra bana neyin gönderildiğini belirlemek için verileri ayrıştırıyorum.Gönderme iş parçacığı, okuma iş parçacığı tarafından tanımlanan sonraki komutu alır ve WriteFile aracılığıyla aynı COM bağlantı noktasına gönderir. Anahtar, kendimle cihaz arasında bir alma/gönderme ilişkisi olmasıdır.
Sorum şu ki, iç içe geçmiş bir Üretici/Tüketici modelim var mı? Alma iş parçacığım aygıttan geliyorsa ve ileti dizisi cihaza üretiyorsa, iş parçacıklarının doğal olarak konuşması gerekir, böylece senkronizasyon sağa mı? Çabalarımı verimli ve hızlı bir şekilde cihazla konuşmam için en iyi yol hangisidir? Not: TThreads içeren C++ Builder 5 kullanıyorum ve kritik bölümleri ve muteksleri kullanabiliyorum.
Düzenleme: Ben de yoklama kullanıyorum, bu yüzden daha iyi çalışırsa WaitCommEvent kullanarak açmak için kullanıyorum!
Doğru, ancak, aygıtı okumaya nasıl eşitleyebilirim, böylece okuduğumda yazmıyor muyum? Küresel bayrak? –
Bunu yapmak zorunda olduğunuzdan emin misiniz? Eğer öyleyse okuma/yazma işlemlerini senkronize etmek için bir semafor kullanabilirsiniz. Bu http://stackoverflow.com/questions/1488712/is-it-safe-to-read-and-write-to-a-serial-port-at-the-same-time-via-different-thre olabilir faydalı. – Duck