Shared Memory auf (mehrere) neue(n) Status/Stati abfragen

Alles rund um die Programmierung mit Qt
Antworten
KartoffelKiffer
Beiträge: 101
Registriert: 27. Februar 2008 15:59

Shared Memory auf (mehrere) neue(n) Status/Stati abfragen

Beitrag von KartoffelKiffer »

Hallo,

mir ist Qt sehr ans Herz gewachsen in letzter Zeit, somit bin ich auch sofort in den Genuss gekommen die neue 4.4 einmal zu testen. Dabei sofort aufgefallen ist mir die SharedMemory-Funktionalität.

Wenn ich das jetzt richtig verstehe: Sobald ich ', sharedMemory("Test")' an einen Konstruktor anhänge, wird eine Variable "Test" im Speicher abgelegt, auf die jeder Prozess mittels eines Streams zugreifen kann.

Nun habe ich zwei Fragen:
1) Was aber wenn ich nicht nur eine Variable abspeichern und abfragen möchte, sondern ein ganzes struct? Ich habe zB ein Widget, das mir eine Reihe von Daten ausgeben soll. Diese Daten werden weiter unten in einem Thread generiert. Muss ich dann für jeden Wert schreiben ', sharedMemory("Var1") ...'?
2) Was ist, wenn sich die Daten im Thread laufend ändern, und ich diese Daten stets aktuell angezeigt haben möchte? Muss ich dann (als Beispiel) alle zwei Sekunden einmal den SharedMemory abfragen? In diesem Falle wäre eine Art Signal/Slot sehr fein.

Code: Alles auswählen

connect(sharedMemory, SIGNAL(dataChanged(data)), this, SLOT(DataHasChanged(data)));
Das sind noch zwei der Fragen, die mich zurzeit beschäftigen.



Mfg KK
Zuletzt geändert von KartoffelKiffer am 19. Juni 2009 14:04, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich habe mich mit diesem neuen Feature noch nicht beschäftigt, aber event. hilft dir dieser Link weiter.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Shared Memory auf (mehrere) neue(n) Status/Stati abfrage

Beitrag von Christian81 »

KartoffelKiffer hat geschrieben: Wenn ich das jetzt richtig verstehe: Sobald ich ', sharedMemory("Test")' an einen Konstruktor anhänge, wird eine Variable "Test" im Speicher abgelegt, auf die jeder Prozess mittels eines Streams zugreifen kann.
Total falsch, siehe Doku

Es wird ein neues SHM-Segment im Speicher angelegt welches den Namen Test hat. Danach musst Du mit QSharedMemory::create() noch Speicher reservieren (je nachdem wie viel Du brauchst) bzw. mit attach() an das schon vorhandene (wenn vorhanden) Speichersegment andocken. Wie gesagt - steht auch alles schön in der Doku.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten