Например, если мы разрабатываем консольное приложение, в котором нам необходимо информировать пользователя о задачах, которые будут выполняться последовательно, информационные сообщения должны сохраняться в течение разумного времени, чтобы пользователь успел их прочитать, прежде чем они будут удалены и удалены. программа переходит к следующей команде.
В этой статье 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().