SharedMemory Änderung erzeugt Windows Message
-
Servus,
ich habe ein SharedMemory Bereich. Diesen kann ich über einfach über ein Zeiger (z.B. pZeiger[0]) schreiben und lesen.
Meine Fragen:
- Kann ich daraus lesen während ein anderer Vorgang daraus liest oder darin schreibt. Ich denke nicht.
- Ich möchte eine Änderung im Speicher direkt in einem MFC Programm anzeigen lassen. Z.B.DDX_Text(pDX, IDC_Wert1, pExCon[1]);Bei zwei MFC Programmen läuft das einwandfrei. Wenn ich als zweites Programm eine DLL laufen lassen, funktioniert das nicht. Welche Möglichkeiten habe ich, eine Änderung im Speicher im MFC Programm zu melden?
void CExConDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); memmap("D:/ExCon.tmp", 0006, sizeof(double)*6, &ExCon); double* pExCon = (double*) memGetAddr(&ExCon); for(;pExCon[0]==1;); pExCon[0] = 1; //{{AFX_DATA_MAP(CExConDlg) DDX_Text(pDX, IDC_Wert1, pExCon[1]); DDX_Text(pDX, IDC_Wert2, pExCon[2]); DDX_Text(pDX, IDC_Wert3, m_Wert3); DDX_Text(pDX, IDC_Wert4, m_Wert4); //}}AFX_DATA_MAP pExCon[0] = 0; }
-
klar kannst du gleichzeitig schreiben und lesen
doof ist nur ... wenn man das nicht synchronisiert kommt oft blödsinn dabei rauswas das andere angeht... du könntest ja jeden prozess der an dem shared memory bereich was ändert irgendwas machen lassen was andere prozesse mitbekommen, ne window message broadcasten oder sonstwas
oder du kannst den bereich einfach periodisch überprüfen und immer gucken obs änderungen gibt
-
Das muss sehr schnell sein, weil es Verwendung findet in einem Simulationsprogramm. Was bietet sich da an(z.B. WindowsMessage).
Periodisch schauen, ob es Änderung gibt, mach ich gerade. Aber da kommt es nach kurz oder lang zu einem Access Violation. Deshalb die Frage, ob ich lesen und schreiben gleichzeitig kann.
-
etsmart schrieb:
Das muss sehr schnell sein, weil es Verwendung findet in einem Simulationsprogramm. Was bietet sich da an(z.B. WindowsMessage).
Periodisch schauen, ob es Änderung gibt, mach ich gerade. Aber da kommt es nach kurz oder lang zu einem Access Violation. Deshalb die Frage, ob ich lesen und schreiben gleichzeitig kann.
Du musst die Daten mit einem Mutex schützen!
Dann könntest Du zusätzlich einen Event nehmen, der abzeigt, dass es neue Daten gibt.Wenn es nur einen Client gibt ist das einfach... gibt es mehrere Clients würde ich auf Pipes umsteigen.
-
Naja, wenn irgendwie möglich würde ich einfach nur einen Prozess verwenden.
Und wenn schon RPC sein muss, dann nicht unbedingt selbst mit Shared-Memory was hacken, sondern Mechanismen ala Pipes, Message-Slots, Sockets etc. verwenden.
Oder gleich DCOM, wenn das schnell genug ist.