Главная    Разработка ПО    функции языка Си

Описание функций языка Си

" N "

nanosleep 

nearbyint, nearbyintf, nearbyintl 

nextafter, nextafterf, nextafterl 

nexttoward, nexttowardf, nexttowardl 

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

nanosleep – приостановка работы потока

Синтаксис:

#include < time.h >
int nanosleep (const struct timespec *tw, struct timespec *tr);

Аргументы:

const struct timespec *tw – указатель на структуру, содержащую время задержки в наносекундах.

struct timespec *tr – указатель на структуру, в которую будет помещен остаток времени задержки, если задержка была досрочно прервана сигналом или NULL, если не требуется анализировать остаток времени задержки.

Возвращаемое значение:

0 - если истекло время приостановки, указанное в аргументе функции,

-1 - если приостановка была прервана сигналом или при запуске функции возникли ошибки. При этом переменной ernno будет присвоен код:

[EINTR] – если приостановка была прервана сигналом
[EINVAL] – если неверно задан интервал времени для приостановки
[EPERM] – если функция была вызвана из функции обработки прерываний

Описание:

Функция nanosleep () приостанавливает работу потока, в котором она была вызвана, на указанное в аргументе tw время или до поступления сигнала по которому вызывается функция обработки сигналов или программа завершает свою работу.

Если разрешающая способность системных часов меньше чем 1 наноосекунда и указанный интервал не кратен разрешающей способности, то он будет округлен до большего значения, кратного разрешающей способности.

Продолжительность остановки потока управления не может быть меньше указанного времени, если остановка не была прервана сигналом. Однако время приостановки может быть больше, указанного времени из-за накладных расходов, разрешающей способности системных часов или если в момент окончания приостановки работал более приоритетный поток.

Приостановка потока с помощью функции nanosleep() не оказывает влияния на обработку сигналов.

Если приостановка была прервана сигналом, и аргумент tr не NULL, то в аргумент tr будет записан остаток времени приостановки.

Структура timespec имеет вид:

struct timespec { time_t tv_sec; //Секунды long tv_nsec; //Наносекунды }

Пример:

В примере с помощью функции nanosleep() приостанавливается работа программы на 5,125 секунды.


#include < stdio.h >  //Для puts 
#include < time.h >   //Для nanosleep

int main (void)
{    
   //Структура содержащая время задержки
   struct timespec tw = {5,125000000};
   //Структура, в которую будет помещен остаток времени
   //задержки, если задержка будет прервана досрочно
   struct timespec tr;
   //Вывод сообщения о приостановки работы
   puts (“Приостановка работы на 5,125 секунды”);
   //Приостановка работы
   nanosleep (&tw, &tr);
   //Вывод сообщения о возобновлении работы
   puts (“Возобновление работы”);
   
   return 0;
}

Результат:

Приостановка работы на 5,125 секунды
Возобновление работы



Смотри так же:

sleep, nanosleep, usleep.


Яндекс.Метрика

Рейтинг@Mail.ru