Domanda

voglio condividere dati con un più processi. Il mio primo tentativo è quello di utilizzare punto a punto coda di messaggi con più lettori da quando ho letto che il P2P Msg coda è molto veloce.

Durante la mia prova, sembra che più lettori leggono dalla stessa coda e una volta che un messaggio viene prelevato da un lettore, gli altri lettori non saranno in grado di recuperare lo stesso messaggio.

Che cosa è una migliore IPC per la condivisione dei dati di più processi? I dati vengono aggiornati di frequente (più volte al secondo) e quindi penso WM_COPYDATA non è una scelta buona e interferirà con la coda di messaggi "normale".

Il mio secondo tentativo sarà probabilmente una memoria condivisa + mutex + eventi

È stato utile?

Soluzione

Point-to-point code funziona bene. Sì, quando si invia, solo ricevitore riceverà il messaggio ma il mittente può interrogare la coda (chiamando GetMsgQueueInfo ) per vedere quanti ascoltatori (wNumReaders membro della MSGQUEUEINFO ) ci sono e semplicemente ripetere il messaggio che il numero di volte.

Altri suggerimenti

  

Infine, è perfettamente valida per più di un thread o un processo per aprire la stessa coda per l'accesso in lettura o in scrittura. code di messaggi Point-to-point supportano più lettori e più scrittori. Questa pratica consente, ad esempio, un processo di scrittura di inviare messaggi a più processi client o più processi writer per inviare messaggi a un singolo processo lettore. V'è, tuttavia, non c'è modo di indirizzare un messaggio a un processo specifico lettore. Quando un processo o un filo, legge la coda, si leggerà il messaggio successivo disponibile. V'è anche un modo per trasmettere un messaggio a più lettori.

     

Programmazione Windows Embedded CE 6.0 per sviluppatori di riferimento, quarta edizione, Douglas ebollizione, pagina 304

Nonostante l'avvertimento, ide di ctacke sembra andare bene per i miei casi d'uso.

Caveat:
I miei lettori hanno bisogno di coda Sleep(10) dopo che recuperano la loro parte di messaggio per consentire ad altri lettori di andare a prendere i messaggi. Senza Sleep(), solo un processo del lettore viene segnalata da attesa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top