تبث رسالة إلى عمليات متعددة (قائمة انتظار الرسائل من نقطة إلى نقطة مع قراء متعددين)

StackOverflow https://stackoverflow.com/questions/3563844

سؤال

أريد مشاركة بيانات مع عمليات متعددة. محاولتي الأولى هي الاستخدام قائمة انتظار رسالة إلى نقطة إلى نقطة مع العديد من القراء منذ أن قرأت أن قائمة انتظار P2P MSG سريعة جدًا.

أثناء الاختبار ، يبدو أن العديد من القراء يقرؤون من نفس قائمة الانتظار وبمجرد جلب الرسالة بواسطة قارئ واحد ، لن يتمكن القراء الآخرون من جلب نفس الرسالة.

ما هو أفضل IPC لمشاركة البيانات في عمليات متعددة؟ يتم تحديث البيانات بشكل متكرر (عدة مرات في الثانية) ، لذلك أعتقد أن WM_CopyData ليس خيارًا جيدًا وسيتداخل مع قائمة انتظار الرسائل "العادية".

من المحتمل أن تكون محاولتي الثانية بمثابة ذاكرة مشتركة + أحداث Mutex +

هل كانت مفيدة؟

المحلول

ستعمل طوابير من نقطة إلى نقطة بشكل جيد. نعم ، عندما ترسل ، سيحصل جهاز استقبال واحد فقط على الرسالة لكن يمكن للمرسل الاستعلام عن قائمة الانتظار (عن طريق الاتصال getMsgqueueInfo) لمعرفة عدد المستمعين (Wnumreaders عضو في msgqueueinfo) هناك وببساطة كرر الرسالة أن عدد المرات.

نصائح أخرى

أخيرًا ، من الصحيح تمامًا لأكثر من مؤشر ترابط أو عملية لفتح قائمة الانتظار نفسها للوصول إلى القراءة أو للوصول إلى الكتابة. تدعم قوائم قوائم الرسائل من نقطة إلى نقطة العديد من القراء والكتاب المتعددين. تسمح هذه الممارسة ، على سبيل المثال ، بعملية كاتب واحدة لإرسال رسائل إلى عمليات عميل متعددة أو عمليات كاتب متعددة لإرسال رسائل إلى عملية قارئ واحدة. ومع ذلك ، لا توجد طريقة لمعالجة رسالة إلى عملية قارئ معينة. عندما تقرأ عملية قائمة الانتظار ، أو مؤشر ترابط ، فإنها ستقرأ الرسالة التالية المتاحة. لا توجد أيضًا طريقة لبث رسالة إلى العديد من القراء.

برمجة Windows Orgended CE 6.0 Developer Reference ، الطبعة الرابعة ، Douglas Boiling ، صفحة 304

على الرغم من التحذير ، يبدو أن IDE من CTACKE على ما يرام بالنسبة لحالات الاستخدام الخاصة بي.

تنبيه قضائي:
يحتاج قراء قائمة الانتظار إلى Sleep(10) بعد أن يجلبوا نصيبهم من الرسائل للسماح للقراء الآخرين بالذهاب وجلب الرسائل. بدون Sleep(), ، يتم الإشارة إلى عملية قارئ واحدة فقط من الانتظار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top