Syntaks:
Figuren ovenfor sier syntaks for nanosleep -funksjonen, og den er definert i overskriftsfilen.
RQTP: RQTP er en peker til timespec som indikerer intervallet av tid som brukeren ønsker å suspendere eller pause tråden/programmet.
RMTP: RMTP er en peker til timespec som indikerer at funksjonen har lagret perioden som forblir i intervallet.
Strukturen Timespec brukes til å identifisere tidsintervaller på nanosekundnivå.
Formål å bruke nanosleep () i C
Nanosleep er et bærbart operativsystemgrensesnitt. Det er en system-kompatibel samtale for å suspendere en bestemt tråd av et programs utførelse i en bestemt periode. Lignende funksjoner er også tilgjengelige for samme formål. Søvn er en av disse prosessene som tar sekunder å suspendere programmet, men det sies å levere fjæring med lav oppløsning. Derfor gir Nanosleep -funksjonen tillatelse til brukeren til å gi søvntiden i nanosekunder for bedre presisjon.
Tidligere ble Nanosleep () -metoden brukt til å håndtere pauser på opptil 2 ms når de ble kalt fra de planlagte trådene, men det ville kreve mer presisjon for å håndtere tidskritisk maskinvare eller applikasjoner.
Returverdi
Feil
Hvis spennet som er bestemt i RQTP, er noe annet enn en presis forskjell på skjult klokke med granularitet, vil det bli samlet. Dessuten kan det være en utsettelse senere hvis resten av arbeidet er ferdig før CPU har lov til å utføre anropsstrengen en gang til.
Siden metoden Nanosleep ikke fungerer i et relativt tidsrom, har den en tendens til å være risikabel hvis metoden kalles gjentatte ganger etter å ha vendt hindring eller avbrudd etter signaler, fordi tiden mellom signalavbrudd og omstartsanropet vil forårsake et lite skifte når søvnen Finishes. Bruk klokke nanosleep (2) med en direkte tidsverdi for å holde deg borte fra dette problemet.
Nanosleep () skal kvantifisere tid med motstanderens sanntidsklokke, i henhold til posix.1. Linux bruker nok en gang klokken monotonisk for å overvåke tiden. Dette er antagelig uvesentlig fordi posix.1 Clock Settime (2) uttrykker spesielt at spasmodiske endringer i klokke sanntid ikke burde påvirke nanosleep ().
Hvis vi setter verdien av sanntidsklokken via Settime (2). Dette skal ikke ha noen innvirkning på programmene som er blokkert og venter i kø i en relativ tid basert på denne klokken.
Eksempel i c
Først av alt måtte vi initialisere biblioteket som har strukturen til en timespec -forespørselstid og en timespec gjenværende tidspeker. Det er to tips som lagrer hvor lang tid brukeren ønsker å suspendere programmet, og også den gjenværende tiden som stoppintervalltiden har igjen.
Etter det starter vi hovedorganet vårt, og vi må lage to timespec -objekter som vil inneholde vår forespørsel og gjenværende tid. Vi kan tilordne hvilken som helst verdi til disse to objektene, men i vårt tilfelle har vi valgt 3 sekunder og 500 nanosekunder.
Nå vil vi passere adressene til de opprettede objektene til Nanosleep, som du kan observere i linje nummer 10. Vi vil også sjekke om programmet var vellykket eller mislyktes ved å observere returverdien til metoden nanosleep.
Programmet ovenfor vil skrive ut følgende utgang hvis det utføres vellykket:
Hvis vi endrer responsverdien til 1, vil programutførelsen mislykkes og produsere følgende feil som utgang.
Nå, hvis vi vil kjøre følgende kode på vår GCC -terminal. Vi lagrer først filen vår som hoved.C og bruk deretter følgende kommando på terminalen din for å kjøre programmet: “GCC-Wall Main.c-o ”. En vegg betyr å aktivere alle advarselsmeldingene mens vi utfører programmet vårt.
Bugs
Den nåværende utførelsen av nanosleep () avhenger av den typiske bitklokkekomponenten, som har et mål på 1/Hz S. Langs disse linjene stopper Nanosleep () konsekvent for den forhåndsdefinerte tiden, men det kan ta opptil 10 ms lengre enn indikert til samspillet blir løpbar en gang til. For en lignende forklaring returneres verdien i tilfelle et formidlet signal i *RMTP og blir normalt justert til følgende større forskjell på 1/Hz S.
Begrunnelse:
Det er normalt å suspendere utførelsen av en streng i noen tid for å kartlegge situasjonen med et øye mot ikke-inntrykkende arbeid. Utallige reelle nødvendigheter kan bli møtt med en enkel utvidelse til søvn () som gir et bedre mål.
I Posix.1-1990 Norm og SVR4, det er mulig å utføre en slik hverdagspraksis, bortsett fra gjentakelsen av vekker er begrenset av målet med alarm () og søvn () -funksjoner. Det vil sannsynligvis skrive en slik standard i 4.3 BSD mens du ikke bruker noen statisk lagring og sparer ingen rammekontorer. Selv om det er mulig å komponere en funksjon med sammenlignbar nytteverdi for å sove () ved å bruke resten av tidtakeren_* () -kapasiteten, krever en slik kapasitet bruk av skilt og bestilling av et betydelig antall. Dette volumet av IEEE STD 1003.1-2001 trenger at nanosleep () være ikke-meddlesom hvis skiltene fungerer.
Nanosleep () -arbeidet vil returnere en verdi av 0 på fremgang og - 1 på feil, eller igjen når det er forstyrret. Dette siste alternativet er ikke helt det samme som søvn (). Dette ble gjort i lys av det faktum at resterende tid blir returnert ved å bruke en stridsstrukturpeker, RMTP, i stedet for som en måte å bringe godkjenning tilbake.
Konklusjon
Fokuset for denne forskningen var å hjelpe deg med å utvikle et bedre grep om metoden nanosleep (). For å ha et godt grep av metoder som Nanosleep er det nødvendig å illustrere dem med det enkleste eksemplet. Vi har prøvd vårt beste for å gi det beste av informasjon som feil, begrunnelse, eksempler, feil og synopsis. Slik at du kan fortsette å forbedre tolkbarheten og gjenbrukbarheten til koden din. Vi har gått over en enkel syntaksforklaring. Artikkelen vil hjelpe deg med å raskt få en grundig tolkning av hvordan du bruker Nanosleep () som en metode. For å gjøre mye bedre bruk av metoden, er hensyn som variabler blitt adressert og godt forklart for brukerne.