|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
[C++]shared memory: dubbio
Ho un dubbio sulla shared memory:
devo far comunicare 2 processi e la cosa più veloce è la shmem (accetto consigli anche su scelte migliori) visto che ho una piccola e fixed area di memoria da usare. Un server che gira (murmur da me modificato) che comunica con vari clients (mumble da noi modificato) ed un monitor che controlla chi è connesso a chi. Ho usato una maschera di bit (sandard class bitset ) dove ogni bit rappresenta una connessione in una matrice di connessioni. Ogni volta che uno si s/collega aggiorno la maschera e la copio nella shared mem. Codice:
memcpy( Server::pShMem + 1, &UserBits, SHARED_MEM_SIZE * 8); Codice:
memcpy( &BtnMatrix, pShMem + 1, SHARED_MEM_SIZE * 8 ); + 1 perchè il primo byte è il semaforo ... e quì casca l'asino in entrambi ho messo questo controllo: Codice:
while (*pShMem != SHARED_MEM_FREE_ID) // waits for the semaphore free usleep(2000); ma in quel preciso momento B ha appena controllato e mette a 2 ? c'è un modo per risolvere il problema ? a me sembra di no. L'unica soluzione che vedo è mettere il monitor in un thread del server ma significherebbe riscrivere tutto!!! il mio monitor è fatto con wxWidgets, il server con QT. Il problema è che per adesso il monitor fa solo da monitor ma dovrà anche funzionare da interruttore delle connessioni, quindi dovrà anche scrivere sulla shared memory. Spero di essere stato chiaro .... grazie PS: il post è così lungo e dettagliato perchè avevo anche un problema sulla dimensione della memoria, adesso risolto con * 8
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:34.



















