Функция Sleep() на языке C

Funkcia Sleep Na Azyke C



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

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

В этой статье Linuxhint вы узнаете, как использовать функцию Sleep() для создания задержек в реальном времени. Мы покажем вам синтаксис и описание этой функции, а также возможности, которые POSIX предоставляет для создания задержек длительностью менее секунды. Затем на практических примерах, кодах и картинках мы покажем, как задержать выполнение программы и влияние сигналов на эту функцию.








Синтаксис функции Sleep() на языке C



без подписи интервал спать ( без подписи интервал сек )

Описание функции Sleep() на языке C

Функция Sleep() переводит процесс или поток в спящий режим на время в секундах, указанное во входном аргументе «сек», который представляет собой целое число без знака. После вызова функции Sleep() вызывающий процесс переходит в режим ожидания до тех пор, пока не истечет время ожидания или не будет получен сигнал.



Эта функция часто используется для обеспечения длительных задержек более 1 секунды при выполнении процессов в реальном времени. Для задержек менее 1 секунды POSIX предоставляет функцию разрешения микросекунд usleep(), которая использует тот же вызов метода, что и Sleep(). Для задержек менее 1 микросекунды также существует функция nanosleep() с разрешением 1 наносекунда, но с другим методом вызова, где она использует структуры «timespec» в качестве входных аргументов для установки времени задержки.





Если функция Sleep() израсходовала все указанное время, в качестве результата она возвращает 0. Если выполнение прерывается поступлением сигнала до истечения указанного времени, оно возвращает оставшееся количество секунд до этого времени.

Функция Sleep() определена в заголовке unistd.h. Чтобы использовать его, нам нужно включить этот файл в код следующим образом:



#include

Как ввести задержки в процесс с помощью функции Sleep()

В этом примере мы создаем таймер, состоящий из бесконечного цикла, в котором мы печатаем сообщение «Прошедшее время» в командной консоли, а затем количество прошедших секунд процесса. Каждый из этих циклов повторяется каждые 2 секунды из-за задержки, вызванной функцией сна().

Для этого берем пустой файл с расширением «.c» и добавляем в него заголовки «stdio.h» и «unistd.h». Затем мы открываем пустую функцию main() и определяем в ней переменную секунды типа int, которую мы будем использовать в качестве счетчика прошедшего времени.

После вставки заголовков и объявления переменной мы открываем бесконечный цикл и используем в нем функцию printf() для отображения сообщения и значения времени. В следующей строке мы увеличиваем переменную времени на 2, а затем вызываем функцию сна() со значением 2 в качестве входного аргумента. Таким образом, этот цикл повторяется каждую секунду и мы получаем счетчик, отображающий на экране прошедшее время. Теперь давайте посмотрим на код этого приложения. Давайте посмотрим полный код для этого примера:

#include
#include

пустота основной ( )
{
интервал секунды '=' 0 ;
пока ( 1 )
{
печать ( 'Прошедшее время: %i \п ' , секунды ) ;
секунды += 2 ;
спать ( 2 ) ;
}

}

Далее мы увидим картинку с компиляцией и выполнением этого кода. Как мы видим, каждые 2 секунды программа выводит на экран секунды, прошедшие с момента выполнения процесса.

Влияние сигналов на функцию Sleep()

В этом примере мы хотим наблюдать влияние сигналов на процесс, который переводится в спящий режим с помощью функции Sleep(). Для этого мы создадим простое приложение, состоящее из функции main() и обработчика сигнала 36.

В первой строке функции main() мы объявляем оставшуюся переменную типа int, в которой сохраняем значение, возвращаемое функцией Sleep(). Затем мы используем функцию signal(), чтобы привязать обработчик к сигналу 36. В следующей строке мы отображаем PID процесса, который затем используем для отправки сигнала из второй оболочки в процесс. Наконец, мы вызываем функцию Sleep() и устанавливаем для ее входного аргумента значение 60 секунд, достаточное для отправки сигнала из второй оболочки. Оставшуюся переменную мы отправляем в качестве выходного аргумента в функцию сна().

Обработчик, прикрепленный к сигналу 36, состоит из строки кода, в которой функция printf() печатает сообщение «Оставшееся время:», за которым следует значение, возвращаемое функцией сна() в момент поступления сигнала в процесс. Давайте посмотрим на код этого примера.

#include
#include
#include
#include

пустота обработчик ( интервал оставшийся ) ;

пустота основной ( )
{
интервал оставшийся ;
сигнал ( 36 , обработчик ) ;
печать ( «Идентификатор процесса: %i \п ' , получитьпид ( ) ) ;
оставшийся '=' спать ( 60 ) ;
}

пустота обработчик ( интервал оставшийся )

{
печать ( 'Оставшееся время: %i \п ' , оставшийся ) ;
}

Следующее изображение, которое мы видим, показывает компиляцию и выполнение этого кода:

Чтобы увидеть влияние сигналов на этот процесс, мы скомпилируем этот код и запустим его. Затем со второго терминала мы отправляем сигнал со следующим синтаксисом:

убийство - n сигнал ПИД

На следующем изображении, которое мы видим, показано выполнение кода в предыдущей консоли и последствия поступления сигнала, отправленного со следующей консоли. Как видите, сигнал подавил эффект функции Sleep(), разбудив процесс:

Заключение

В этой статье Linuxhint мы показали вам, как использовать функцию сна(), чтобы перевести процесс в спящий режим на указанное количество секунд. Мы также показали вам синтаксис, а также описание функции и метода вызова.

На практических примерах, фрагментах кода и изображениях мы показали, как перевести процесс в спящий режим и что влияет на поступление сигнала на спящий процесс с помощью функции Sleep().