Я хочу поделиться данными с несколькими процессами. Моя первая попытка - использовать очередь сообщений точка-точка с несколькими читателями, так как я прочитал, что очередь сообщений P2P очень быстрая.
Во время моего теста кажется, что несколько читателей читают из одной очереди и как только один читатель получает сообщение, Данные часто обновляются (несколько раз в секунду), поэтому я думаю, что WM_COPYDATA не является хорошим выбором и будет мешать «нормальной» очереди сообщений.
Моя вторая попытка, вероятно, будет общей памятью + мьютекс + события
Прямые очереди будут работать нормально. Да, при отправке только один получатель получит сообщение , но отправитель может запросить очередь (вызвав GetMsgQueueInfo), чтобы узнать, сколько слушателей (член wNumReaders из MSGQUEUEINFO), и просто повторите сообщение указанное количество раз.
Наконец, более чем один поток или процесс могут открывать одну и ту же очередь для чтения или записи. Очереди сообщений «точка-точка» поддерживают несколько читателей и несколько записей. Эта практика позволяет, например, одному процессу записи отправлять сообщения нескольким клиентским процессам или нескольким процессам записи отправлять сообщения одному процессу чтения. Однако нет способа адресовать сообщение конкретному процессу чтения. Когда процесс или поток читает очередь, он читает следующее доступное сообщение. Также нет возможности передать сообщение нескольким читателям.
Programming Windows Embedded CE 6.0 Developer Reference, Fourth Edition, Douglas Boiling, Page 304
Несмотря на предупреждение, ctacke ide, кажется, подходит для моих случаев использования.
Предостережение:
Читатели моей очереди должны засыпать(10)
после получения своей доли сообщений, чтобы другие читатели могли идти и получать сообщения. Без Sleep()
только один процесс чтения получает сигнал об ожидании.