C Użycie funkcji nanosleep

C Użycie funkcji nanosleep
Funkcja Nanosleep jest metodą systemu UNIX. Celem Nanosleep jest zawieszenie lub zatrzymanie wykonania określonego programu na określony okres. Ten artykuł pomoże ci zrozumieć i zapewni lepsze zrozumienie „Jak korzystać z funkcji Nanosleep ().„Jeszcze jedną funkcją jest„ sen ”, ale skorzystamy z nanosleep (), ponieważ możemy zapewnić nanosekund na czas pauzy/snu.

Składnia:

Powyższy rysunek przedstawia składnię funkcji Nanosleep i jest zdefiniowana w pliku nagłówka.

RQTP: RQTP jest wskaźnikiem do TimesPec, który wskazuje interwał czasu, dla którego użytkownik chce zawiesić lub zatrzymać wątek/program.

RMTP: RMTP jest wskaźnikiem do TimesPec, który wskazuje, że funkcja zapisała okres, który pozostaje w przedziale.

Struktura TimesPec jest wykorzystywana do identyfikacji przedziałów czasowych na poziomie nanosekundowym.

Cel użycia nanosleep () w c

Nanosleep to przenośny interfejs systemu operacyjnego. Jest to wezwanie zgodne z systemem, aby zawiesić określony wątek wykonania programu na określony czas. Podobne funkcje są również dostępne w tym samym celu. Sen jest jednym z tych procesów, które zajmuje kilka sekund, aby zawiesić program, ale mówi się, że zapewnia zawieszenie o niskiej rozdzielczości. Dlatego funkcja Nanosleep zapewnia użytkownikowi pozwolenie na zapewnienie czasu snu w nanosekundach dla lepszej precyzji.

Wcześniej metoda nanosleep () została użyta do obsługi przerw do 2 ms, gdy wywołana z zaplanowanych wątków, ale wymagałoby większej precyzji do obsługi sprzętu lub aplikacji o krytycznych czasach.

Wartość zwracana

  1. Jeśli program został pomyślnie wykonany, zwróci 0.
  2. Jeśli program został wykonany bezskutecznie lub nie powiódł się i został przerwany, zwróci -1.

Błędy

  1. Efault: Rodzaj błędu EFAULT występuje, jeśli istnieje jakikolwiek problem w kopiowaniu informacji z przestrzeni użytkowników.
  2. Eintr: Rodzaj błędu EINTR występuje, gdy nastąpi przerwa w przerwie przez sygnał dostarczany do wątku.
  3. Einval: Jeśli wartość nanosekund w strukturze Timesspec nie jest w zakresie od 0 do 999999999 lub ma wartość ujemną, wyrzuci ten błąd.

Jeśli rozpiętość określona w RQTP jest czymś innym niż precyzyjna różnica w ukrytym zegarku ziarnistości, zostanie zebrana. Poza tym może nastąpić odroczenie później, jeśli reszta pracy zostanie zakończona, zanim procesor będzie mógł ponownie wykonać ciąg wywoływania.

Ponieważ metoda Nanosleep nie działa przez względny czas, zwykle jest ryzykowna, jeśli metoda jest powołana wielokrotnie po przeszkodzie lub przerw przez sygnały, ponieważ czas między przerwami sygnału a wywołaniem ponownego uruchomienia spowoduje niewielkie przesunięcie, gdy sen wykończenia. Użyj zegara Nanosleep (2) z bezpośrednią wartością czasu, aby trzymać się z dala od tego problemu.

Nanosleep () powinien określić ilościowo czas za pomocą zegara czasu rzeczywistego przeciwnika, zgodnie z POSIX.1. Po raz kolejny Linux wykorzystuje zegar monotoniczny zegar do monitorowania czasu. Jest to prawdopodobnie niematerialne, ponieważ pozak.1 Settime zegara (2) szczególnie wyraża, że ​​skurczowe zmiany w czasie rzeczywistym zegara nie powinny wpływać na Nanosleep ().

Jeśli ustawimy wartość zegara w czasie rzeczywistym za pośrednictwem Settime (2). Nie ma to żadnego wpływu na programy, które są zablokowane i czekające w kolejce na czas względny na podstawie tego zegara.

Przykład w c

Po pierwsze, musieliśmy zainicjować bibliotekę, która ma strukturę wskaźnika czasu żądania TimesPec i wskaźnik czasu TimesPec. Istnieją dwa wskaźniki, które przechowują czas, który użytkownik chce zawiesić program, a także pozostały czas, w którym czas przerwę na zatrzymanie.

Następnie rozpoczynamy nasze główne ciało i musimy utworzyć dwa obiekty czasowe, które będą zawierać nasze żądanie i pozostały czas. Możemy przypisać dowolną wartość tym dwóm obiektom, ale w naszym przypadku wybraliśmy 3 sekundy i 500 nanosekund.

Teraz przekazamy adresy utworzonych obiektów do Nanosleep, ponieważ można obserwować w wierszu nr 10. Sprawdzimy również, czy program się powiódł, czy nie powiódł się, obserwując wartość zwrotną metody nanosleep.

Powyższy program wydrukuje następujące dane wyjściowe, jeśli zostanie pomyślnie wykonany:

Jeśli zmienimy wartość odpowiedzi na 1, wykonanie programu nie powiedzie się i wytworzy następujący błąd jako wyjście.

Teraz, jeśli chcemy uruchomić następujący kod na naszym terminalu GCC. Najpierw zapiszymy nasz plik jako główny.C, a następnie użyj następującego polecenia na terminalu, aby uruchomić program: „GCC-Wall Main.współ". Ściana oznacza włączenie wszystkich komunikatów ostrzegawczych podczas wykonywania naszego programu.

BŁĘDY

Bieżące wykonanie nanosleep () zależy od typowego komponentu zegara bitowego, który ma cel 1/Hz s. Wzdłuż tych linii nanosleep () zatrzymuje się konsekwentnie przez predefiniowany czas, ale może potrwać do 10 ms dłużej niż wskazano, dopóki interakcja będzie się znów wykonywać. W przypadku podobnego wyjaśnienia wartość zwrócona w przypadku przenoszonego sygnału w *RMTP i jest zwykle dostosowana do następujących większej różnicy 1/Hz S.

Racjonalne uzasadnienie:

Normalne jest zawieszenie wykonywania łańcucha na pewien czas, aby zbadać sytua. Niezliczone rzeczywiste potrzeby można spotkać z prostym przedłużeniem snu (), co daje lepszy cel.

W POSIX.1-1990 Norm i SVR4, możliwe jest wykonanie takiej codziennej praktyki, z wyjątkiem nawrotu budzenia, jest ograniczone przez cel funkcji alarm () i sleep (). Prawdopodobnie napisze taki standard w 4.3 BSD, jednocześnie nie wykorzystując statycznego zapasów i oszczędzania bez biur. Chociaż możliwe jest skomponowanie funkcji o porównywalnej przydatności do sleep () wykorzystując resztę zdolności Timer_* (), taka pojemność wymaga wykorzystania znaków i rezerwacji pewnej znaczącej liczby. Ten tom IEEE STD 1003.1-2001 potrzebuje, aby nanosleep () nie był meddlesome, jeśli znaki działają.

Praca nanosleep () zwróci wartość 0 w sprawie postępu i - 1 w przypadku awarii lub ponownie za każdym razem, gdy ingeruje. Ten ostatni przypadek opcji nie jest taki sam jak Sleep (). Dokonano tego w świetle faktu, że czas resztek jest zwracany, stosując wskaźnik struktury rywalizacji, RMTP, a nie jako sposób na przywrócenie aprobaty.

Wniosek

Celem tych badań było pomoc w opracowaniu lepszego zrozumienia metody nanosleep (). Aby mieć dobry przyczepność metod takich jak Nanosleep, należy je zilustrować najprostszym przykładem. Staraliśmy się jak najlepiej dostarczyć najlepsze informacje, takie jak błędy, uzasadnienie, przykłady, błędy i streszczenie. Abyś mógł nadal poprawić interpretację i ponowne użycie kodu. Przeszliśmy przez proste wyjaśnienie składni. Artykuł pomoże ci szybko uzyskać dokładną interpretację sposobu używania nanosleep () jako metody. Aby znacznie lepiej wykorzystać tę metodę, rozważania jako zmienne zostały rozwiązane i dobrze wyjaśnione dla użytkowników.