Delet minneeksempel.

Delet minneeksempel viser hvordan du bruker QSharedMemory-klassen til a implementere interprosesskommunikasjon ved hjelp av delt minne. For a bygge eksemplet, kjor lage. For a kjore eksemplet, start to forekomster av kjorbare. Hovedfunksjonen () -funksjonen skaper et program og en forekomst av vart eksempels Dialog-klasse. Dialogen vises, og kontrollen sendes til applikasjonen pa standard mate.

To forekomster av klassedialog vises.

Klassedialog arver QDialog. Den encapsulates brukergrensesnittet og en forekomst av QSharedMemory. Den har ogsa to offentlige spor, loadFromFile () og loadFromMemory () som tilsvarer de to knappene pa dialogboksen.

Konstruktoren bygger grensesnittene for brukergrensesnittet og kobler klikket () signalet til hver knapp til den tilsvarende sporfunksjonen.

Merk at «QSharedMemoryExample» sendes til QSharedMemory () -konstruktoren som skal brukes som nokkel. Dette vil bli brukt av systemet som identifikator for det underliggende delte minnesegmentet.

Klikk pa Last inn bilde fra fil .. & # x2e; knappen pa en av dialogene. LastFromFile () -sporet er pakalt. Forst tester det om et delt minnesegment allerede er koblet til prosessen. I sa fall er segmentet frittstaende fra prosessen, sa vi kan v re sikre pa a starte eksemplet pa riktig mate.

Brukeren blir deretter bedt om a velge en bildefil ved hjelp av QFileDialog :: getOpenFileName (). Den valgte filen er lastet inn i en QImage. Ved hjelp av QImage kan vi sikre at den valgte filen er et gyldig bilde, og det tillater oss ogsa a vise bildet i dialogboksen med setPixmap ().

Deretter strommer bildet inn i en QBuffer ved hjelp av QDataStream. Dette gir oss storrelsen, som vi da bruker til a opprette () vart delte minnesegment. Opprette et delt minnesegment fester automatisk segmentet til prosessen. Ved hjelp av en QBuffer lar vi oss fa pekeren til bildedataene, som vi deretter bruker til a gjore et memcopy () fra QBuffer til delte minnesegmentet.

V r oppmerksom pa at vi laser () det delte minnesegmentet for vi kopierer til det, og vi laser opp () det igjen umiddelbart etter kopien. Dette sikrer at vi har eksklusiv tilgang til det delte minnesegmentet for a gjore vart memcopy (). Hvis en annen prosess har segmentlasen, vil prosessen var blokkere til las blir tilgjengelig.

Merk ogsa at funksjonen ikke losner () fra det delte minnesegmentet etter memcopy () og laser opp (). Husk at nar den siste prosessen losner fra et delt minnesegment, blir segmentet utgitt av operativsystemet. Siden denne prosessen er bare en som er knyttet til det delte minnesegmentet for oyeblikket, hvis loadFromFile () losrevet fra det delte minnesegmentet, vil segmentet bli odelagt for vi kommer til neste trinn.

Nar funksjonen returnerer, hvis filen du valgte var qt.png, ser den forste dialogen ut som dette.

I den andre dialogboksen klikker du pa Vis bilde fra delt minne. LastFromMemory () -sporet er pakalt. Det fester forst prosessen til det samme delte minnesegmentet som er opprettet av den forste prosessen. Deretter lases segmentet for eksklusiv tilgang og kobler en QBuffer til bildedata i det delte minnesegmentet. Den strekker deretter dataene til en QImage og laser opp segmentet.

I dette tilfellet losner funksjonen () fra segmentet, for na er vi ferdig ferdig med a bruke den. Endelig vises QImage. Pa dette tidspunktet skal begge dialoger vise samme bilde. Nar du lukker den forste dialogboksen, ringer Dialog destructor QSharedMemory destructor, som losner fra det delte minnesegmentet. Siden dette er den siste prosessen som skal losnes fra segmentet, vil operativsystemet na frigjore det delte minnet.

&kopiere; 2008-2011 Nokia Corporation og / eller dets datterselskaper. Nokia, Qt og deres respektive logoer er varemerker for Nokia Corporation i Finland og / eller andre land over hele verden.

Alle andre varemerker tilhorer deres respektive eiere. Personvernregler.

Lisensinnehavere med gyldige Qt Commercial lisenser kan bruke dette dokumentet i henhold til Qt Commercial License Agreement som folger med Programvaren eller, alternativt, i samsvar med vilkarene i en skriftlig avtale mellom deg og Nokia.

Alternativt kan dette dokumentet brukes under vilkarene i GNU Free Documentation License versjon 1.3 som publisert av Free Software Foundation.