Seite 1 von 1

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

Verfasst: 9. Mai 2008 12:06
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

Verfasst: 9. Mai 2008 12:19
von upsala
Ich habe mich mit diesem neuen Feature noch nicht beschäftigt, aber event. hilft dir dieser Link weiter.

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

Verfasst: 9. Mai 2008 13:01
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.