QThread Class Reference.

QThread-klassen gir en plattformuavhengig mate a administrere trader pa. Mer.

Metoder.

Statiske metoder.

Qt-signaler.

Detaljert beskrivelse.

QThread-klassen gir en plattformuavhengig mate a administrere trader pa.

Et QThread-objekt styrer en trad av kontroll i programmet. QThreads begynner a kjore i run (). Som standard starter run () begynne hendelseslokken ved a ringe exec_ () og kjorer en Qt-hendelsessloyfe inne i traden.

Du kan bruke arbeiderobjekter ved a flytte dem til traden ved hjelp av QObject.moveToThread ().

Koden inne i Arbeiderens spor ville da utfores i en egen trad. Du er imidlertid fri til a koble Arbeiderens spor til et hvilket som helst signal, fra et hvilket som helst objekt, i en hvilken som helst trad. Det er trygt a koble signaler og spor pa tvers av forskjellige trader, takket v re en mekanisme kalt koforbindelser.

En annen mate a lage kode kjorer i en egen trad, er a underklasse QThread og reimplement run (). For eksempel:

I dette eksemplet vil traden ga ut etter at kjorefunksjonen har returnert. Det vil ikke v re noen hendelseslokke som kjorer i traden, med mindre du ringer exec_ ().

Det er viktig a huske at en QThread-forekomst lever i den gamle traden som instanserte den, ikke i den nye traden som kaller lop (). Dette betyr at alle QThreads kospor vil utfore i den gamle traden. Saledes ma en utvikler som onsker a palegge slots i den nye traden, bruke arbeidersobjektets tiln rming; Nye spor skal ikke implementeres direkte i en underklasse QThread.

Nar subclassing QThread, v r oppmerksom pa at konstruktoren kjorer i den gamle traden mens kjore () kjorer i den nye traden. Hvis en medlemsvariabel er tilgjengelig fra begge funksjonene, blir variabelen tilgjengelig fra to forskjellige trader. Sjekk at det er trygt a gjore det.

Merk: Det ma tas forsiktighet ved samhandling med objekter pa tvers av forskjellige trader. Se Synkroniserende trader for detaljer.

Administrerende trader.

QThread vil varsle deg via et signal nar traden er startet (), ferdig () og avsluttet (), eller du kan bruke isFinished () og isRunning () for a sporre tradens tilstand.

Du kan stoppe traden ved a ringe exit () eller avslutte (). I ekstreme tilfeller kan det v re lurt a avslutte () en kjorestreng. Men det er farlig og motlos. Vennligst les dokumentasjonen for terminate () og setTerminationEnabled () for detaljerte opplysninger.

Fra Qt 4.8 og fremover, er det mulig a allokere objekter som lever i en trad som nettopp er avsluttet, ved a koble det ferdige () signalet til QObject.deleteLater ().

Bruk vent () for a blokkere anropstraden, til den andre traden er fullfort (eller til en bestemt tid er gatt).

Den statiske funksjonen gjeldende CurrentThreadId () og CurrentThread () returidentifikatorer for den gjeldende kjoringen. Den tidligere returnerer en plattformsspesifik ID for traden; sistnevnte returnerer en QThread-peker.

For a velge navnet som traden din vil bli gitt (som identifisert av kommandoen ps -L pa Linux, for eksempel), kan du ringe setObjectName () for du starter traden. Hvis du ikke ringer til setObjectName (), vil navnet som er oppgitt til traden v re klassenavnet for kjoretidstypen for tradobjektet (for eksempel «RenderThread» i tilfelle av Mandelbrot-eksempelet, som det er navnet pa QThread-underklassen). Merk at dette ikke er tilgjengelig for oyeblikket med utgivelsesoppbygginger pa Windows.

QThread gir ogsa statiske, plattformuavhengige sovnfunksjoner: sovn (), msleep () og usleep () tillater henholdsvis full sekund, millisekund og mikrosekundopplosning.

Merk: vent () og sleep () -funksjonene skal v re unodvendige generelt, siden Qt er et hendelsesdrevet rammeverk. I stedet for a vente (), bor du vurdere a lytte etter det ferdige () signalet. I stedet for sovnfunksjonene (), bor du vurdere a bruke QTimer.

Skriv dokumentasjon.

QThread.Priority.

Denne enum typen indikerer hvordan operativsystemet skal planlegge nyopprettede trader.

Metodokumentasjon.

QThread .__ init__ (selv, QObject & # 160; foreldre & # 160; = & # 160; Ingen)

Foreldringsargumentet, om ikke None, forarsaker at selv skal eies av Qt i stedet for PyQt.

Konstruerer en ny QThread for a administrere en ny trad. Foreldre tar eierskap av QThread. Traden begynner ikke a utfores for start () kalles.

QThread QThread.currentThread ()

Returnerer en peker til en QThread som administrerer gjeldende trad.

int QThread.currentThreadId ()

Returnerer tradhandtaket til gjeldende trad.

Advarsel: Handtaket som returneres av denne funksjonen, brukes internt og bor ikke brukes i noen programkode.

Advarsel: I Windows er den returnerte verdien et pseudo-handtak for gjeldende trad. Den kan ikke brukes til numerisk sammenligning. Dvs. denne funksjonen returnerer DWORD (Windows-Trad-ID) returnert av Win32-funksjonen getCurrentThreadId (), ikke HANDLE (Windows-thread HANDLE) returnert av Win32-funksjonen getCurrentThread ().

int QThread.exec_ (selv)

Inntrer hendelseslokken og venter til avkjoringen () kalles, returnerer verdien som ble sendt for a avslutte (). Verdien returnert er 0 hvis exit () kalles via avslutte ().

Denne funksjonen skal kalles fra Run (). Det er nodvendig a ringe denne funksjonen for a starte hendelseshandtering.

QThread.exit (selv, int & # 160; returnCode & # 160; = & # 160; 0)

Forteller tradens hendelseslokke for a avslutte med returkode.

Etter at du har ringt denne funksjonen, gar traden av hendelseslokken og gar tilbake fra samtalen til QEventLoop.exec (). QEventLoop.exec () -funksjonen returnerer returnCode.

Ved konvensjon betyr en returkode av 0 suksess, en hvilken som helst ikke-null-verdi indikerer en feil.

Merk at i motsetning til C-bibliotekets funksjon med samme navn, returnerer denne funksjonen til den som ringer – det er hendelsebehandling som stopper.

Ingen QEventLoops blir startet lenger i denne traden til QThread.exec () er blitt kalt igjen. Hvis eventlopet i QThread.exec () ikke kjorer, vil neste anrop til QThread.exec () ogsa returnere umiddelbart.

int QThread.idealThreadCount ()

Returnerer det ideelle antall trader som kan kjores pa systemet. Dette gjores ved a sporre antall prosessorkjerner, bade ekte og logiske, i systemet. Denne funksjonen returnerer -1 hvis antall prosessorkjerner ikke kunne oppdages.

bool QThread.isFinished (self)

Returnerer sant hvis traden er ferdig; ellers returnerer false.

bool QThread.isRunning (selv)

Returnerer sant hvis traden loper; ellers returnerer false.

QThread.msleep (int)

Forcerer gjeldende trad for a sove i msecs millisekunder.

Prioritet QThread.priority (selv)

Returnerer prioriteten for en kjorer trad. Hvis traden ikke kjorer, returnerer denne funksjonen InheritPriority.

Denne funksjonen ble introdusert i Qt 4.1.

QThread.quit (selv)

Denne metoden er ogsa et Qt-spor med C ++-signaturen ugyldig avslutning ().

Forteller tradens hendelseslokke for a avslutte med returkode 0 (suksess). Tilsvarer a ringe QThread.exit (0).

Denne funksjonen gjor ingenting hvis traden ikke har en hendelseslokke.

QThread.run (selv)

Utgangspunktet for traden. Etter a ha ringt start (), kaller den nyopprettede traden denne funksjonen. Standard implementeringen kalles bare exec_ ().

Du kan gjenopprette denne funksjonen for a legge til rette for avansert tradstyring. Nar du gar tilbake fra denne metoden, vil avslutningen av traden avsluttes.

QThread.setPriority (selv, Prioritet & # 160; prioritet)

Denne funksjonen setter prioriteten for en lopende trad. Hvis traden ikke kjorer, gjor denne funksjonen ingenting og returnerer umiddelbart. Bruk start () for a starte en trad med en bestemt prioritet.

Prioritetsargumentet kan v re noen verdi i QThread.Priority enum unntatt InheritPriorty.

Effekten av prioriteringsparameteren er avhengig av operativsystemets planleggingspolicy. Spesielt vil prioriteten bli ignorert pa systemer som ikke stotter tradprioriteter (for eksempel pa Linux, se http://linux.die.net/man/2/sched_setscheduler for flere detaljer).

Denne funksjonen ble introdusert i Qt 4.1.

QThread.setStackSize (self, int & # 160; stackSize)

Angir maksimal stabellstorrelse for traden som skal stableSize. Hvis stackSize er storre enn null, er den maksimale stakkstorrelsen satt til stabellSize byte, ellers blir maksimal stakkstorrelse automatisk bestemt av operativsystemet.

Advarsel: De fleste operativsystemer plasserer minimums- og maksimumsgrenser for tradstablestorrelser. Traden vil ikke starte hvis stakkstorrelsen er utenfor disse grensene.

QThread.setTerminationEnabled (bool & # 160; enabled & # 160; = & # 160; True)

Aktiverer eller deaktiverer avslutning av gjeldende trad basert pa aktivert parameter. Traden ma ha blitt startet av QThread.

Nar aktivert er falskt, er terminering deaktivert. Fremtidige anrop til QThread.terminate () vil returnere umiddelbart uten virkning. I stedet blir oppsigelsen utsatt til terminering er aktivert.

Nar aktivert er sant, er terminering aktivert. Fremtidige anrop til QThread.terminate () vil si opp traden normalt. Hvis terminering er utsatt (dvs. QThread.terminate () ble kalt med terminering deaktivert), vil denne funksjonen avslutte oppringingsgruppen umiddelbart. Merk at denne funksjonen ikke kommer tilbake i dette tilfellet.

QThread.sleep (int)

Tvinger gjeldende trad til a sove i sekunder sekunder.

int QThread.stackSize (selv)

Returnerer maksimal stakkstorrelse for traden (hvis den er satt med setStackSize ()); ellers returnerer null.

QThread.start (selv, Prioritet & # 160; prioritet & # 160; = & # 160; QThread.InheritPriority)

Denne metoden er ogsa et Qt-spor med C ++-signaturens ugyldige start (:: QThread :: Priority = QThread.InheritPriority).

Begynner kjoring av traden ved a ringe (). Operativsystemet planlegger traden i henhold til prioritetsparameteren. Hvis traden allerede kjorer, gjor denne funksjonen ingenting.

Effekten av prioriteringsparameteren er avhengig av operativsystemets planleggingspolicy. Spesielt vil prioriteten bli ignorert pa systemer som ikke stotter tradprioriteter (for eksempel pa Linux, se http://linux.die.net/man/2/sched_setscheduler for flere detaljer).

QThread.terminate (selv)

Denne metoden er ogsa et Qt-spor med C ++-signaturen ugyldig avslutning ().

Terminerer utforelsen av traden. Traden kan eller ikke kan termineres umiddelbart, avhengig av operativsystemets planleggingspolicy. Hor etter det terminerte () signalet, eller bruk QThread.wait () etter terminate (), for a v re sikker.

Nar traden er avsluttet, blir alle trader som venter pa traden ferdig, vaknet opp.

Advarsel: Denne funksjonen er farlig, og bruken av den er motet. Traden kan avsluttes nar som helst i kodebanen. Trader kan avsluttes mens du endrer data. Det er ingen sjanse for at traden kan rydde opp etter seg selv, lase opp noen holdbare mutexes, etc. Kort sagt, bruk denne funksjonen bare hvis det er absolutt nodvendig.

Oppsigelse kan eksplisitt aktiveres eller deaktiveres ved a ringe QThread.setTerminationEnabled (). A ringe denne funksjonen mens avslutningen er deaktivert, resulterer i at termineringen blir utsatt, til terminering er aktivert igjen. Se dokumentasjonen for QThread.setTerminationEnabled () for mer informasjon.

QThread.usleep (int)

Forces gjeldende trad for a sove for usecs mikrosekunder.

bool QThread.wait (self, int & # 160; msecs = # 160; ULONG_MAX)

Blokkerer traden til en av disse betingelsene er oppfylt:

Gruppen som er tilknyttet dette QThread-objektet, er fullfort (det vil si nar det kommer tilbake fra runde ()). Denne funksjonen kommer tilbake sant hvis traden er ferdig. Det returnerer ogsa sant hvis traden ikke er startet enna. tiden millisekunder er gatt. Hvis tiden er ULONG_MAX (standard), vil ventetiden aldri ga ut av tid (traden ma returnere fra run ()). Denne funksjonen returnerer falsk hvis ventetiden er utlopt.

Dette gir lignende funksjonalitet til POSIX pthread_join () -funksjonen.

QThread.yieldCurrentThread ()

Gir utforelse av gjeldende trad til en annen runnbar trad, hvis noen. Merk at operativsystemet bestemmer hvilken trad som skal byttes.

Qt Signaldokumentasjon.

ugyldig ferdig ()

Dette er standard overbelastning av dette signalet.

Dette signalet sendes ut nar traden er fullfort.

tomgang startet ()

Dette er standard overbelastning av dette signalet.

Dette signalet sendes ut nar traden starter.

ugyldig avsluttet ()

Dette er standard overbelastning av dette signalet.

Dette signalet sendes ut nar traden er avsluttet.