Что такое код usleep


usleep — Откладывает выполнение на микросекунды

(PHP 4, PHP 5, PHP 7)

usleep — Откладывает выполнение на микросекунды


Откладывает выполнение программы на указанное число микросекунд.

Список параметров

Время откладываемого исполнения в микросекундах. Микросекунда — это одна миллионная секунды.

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

Эта функция не возвращает значения после выполнения.


Пример #1 Пример использования usleep()

// Текущее время
echo date ( ‘h:i:s’ ) . «\n» ;

// ждать 2 секунды
usleep ( 2000000 );

// вернуться к исполнению
echo date ( ‘h:i:s’ ) . «\n» ;

Результат выполнения данного примера:

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

  • sleep() — Откладывает выполнение
  • time_nanosleep() — Откладывает исполнение на заданное число секунд и наносекунд
  • time_sleep_until() — Откладывает исполнение скрипта до заданного времени
  • set_time_limit() — Ограничение времени выполнения скрипта


(PHP 4, PHP 5, PHP 7)

usleep — Задержка выполнения в микросекундах


Откладывает выполнение программы на указанное число микросекунд.

Список параметров

Время откладываемого исполнения в микросекундах. Микросекунда — это одна миллионная секунды.

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

Эта функция не возвращает значения после выполнения.


Пример #1 Пример использования usleep()

// Текущее время
echo date ( ‘h:i:s’ ) . «\n» ;

// ждать 2 секунды
usleep ( 2000000 );

// вернуться к исполнению
echo date ( ‘h:i:s’ ) . «\n» ;

Результат выполнения данного примера:

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

  • sleep() — Задержка выполнения
  • time_nanosleep() — Задержка на заданное число секунд и наносекунд
  • time_sleep_until() — Откладывает исполнение скрипта до заданного времени
  • set_time_limit() — Ограничение времени выполнения скрипта

User Contributed Notes 12 notes

the snippet below by ‘Marius (mm at co-operation dot de)’ is NOT a usleep and it will keep the CPU at 100% running. why people keep posting that crap is a complete mystery for me.

the idea of sleep and usleep is that by letting the cpu run a few idle cycles so the other programs can have some cycles run of their own. what results in better response times and lower overall system-load. so if you have to wait for something, go to sleep for a few seconds instead of occupying the cpu while doing absolute nothing but waitting.

On both MacOS X and Linux the usleep() call seems to consume CPU cycles, whereas sleep() and time_nanosleep() do not. This was the same on PHP 5.3.29 and 5.5.29.

I used a loop with just a call to sleep/usleep/time_nanosleep, and compared them all with an empty loop. Obviously the empty loop consumed 99% of the CPU, sleep used 0%, usleep used 3% for 1000ms and 6% for 100ms, and time_nanosleep used 0% for both 500ms and 1000ms.

If you’re using Windows then you maybe are in trouble with usleep if you really need to use it.

The Bernie’s microdelay function using fsockopen does not work properly, and the fclose doesn’t help much.

I don’t know if network connections go strange, but I know it does not work since you’ve made more than 2000 — 3000 calls to it, so it’s not a reliable solution in ‘long life’ php scripts, or these are the issues of the microdelay function in my PHP and PHP-GTK applications.

Though another solution should be found, and googling a bit I fount a WinAPI function: Sleep.

So I get with this snippet wich works fine for me, you get milliseconds precission but the more important, it works for long-run scripts and of course, it does not waste any CPU cycles.

// USleep alternative for Windows and PHP4:
$GLOBALS[‘win32api’]->registerfunction(«long Sleep (long dwMillisecods) From kernel32.dll»);

// Now you can call the function from everywhere in your script: $GLOBALS[‘win32api’]->Sleep(milliseconds);

for ($msec = 2000; $msec > 0; $msec = $msec — 125) <
echo «Hi. Next one in $msec msec.\n»;

Note that this function has an overhead!

for ( $i = 0 ; $i 1000000 ; ++ $i )
usleep ( 1 );

This block is running about 70 seconds on my server.
Script take about 70 microseconds for every usleep() function call.

To monitor a scripts CPU ussage and avoid any nasty CPU gobbling loops you can use this function (will not work with windows or safe mode) I know it works on FreeBSD:
function phpmon($max)
$cmd = `ps -Unobody -r -o%cpu`;
$lines = explode(«\n», $cmd);
$usage = substr($lines[1], 0, strpos($lines[1], «.»));
$sleeprate = 500;
while ($usage >= $max)
$cmd = `ps -Unobody -r -o%cpu`;
$lines = explode(«\n», $cmd);
$usage = substr($lines[1], 0, strpos($lines[1], «.»));

where $MAX is the maximum CPU you want the process to consume. e-mail me with any improvements/suggestions.

I have noticed that this consumes a lot of system CPU (at least in my limited testing) possibly from all of the system calls or the huge mathematical functions I used to test the effectiveness of the script.

I have spent DAYS trying to create a reliable usleep()-replacement for Windows.

I have only this to offer:

As commented by someone else already, the gettimeofday() method used below is useless — PHP will use all available CPU power doing nothing.

The fsockopen() method apparently is also useless — as someone else commented, an fclose() was missing in the original post, but this apparently does not solve the problem. After calling the function about 50 or so times, fsockopen() returns immidiately, without any delay — and watching a process monitor in Windows, you can then watch the process taking up increasingly more memory, until eventually PHP aborts (or crashes) when it reaches maximum.

The win32api-method is also a no-go . after calling the Sleep function a few hundred times (during which memory usage will also go up every time due to a memory leak somewhere), PHP will cause an exception and Windows will terminate it.

I have given up — I don’t think there is any viable solution to this problem under PHP 4.

If you need this function, upgrade your project to PHP 5.

Or settle for 1-second delays with the sleep()-function.

These, unfortunately, seem to be your only options.

Dude you are SO the man for that code snippet. It worked like a charm. I just wanted to point out a couple things and offer my own improvement.

1. If you’re like me, you were probably wondering why the socket had to keep being recreated on each call, and why you couldn’t just create a static socket. Its because socket_select assumes you’re passing in a pointer, and will alter the variable on return to reflect the actual sockets that were changed.

2. I couldn’t figure out for the life of me why socket_select wasn’t defined. Its because you hadn’t enabled the right extension in php.ini

Ok so heres my slight improvement. The only real thing I did is use a static variable for the socket, to avoid creating a brand new socket on each call of this function. I’m not sure if socket creation will cause things to crash down the line like the other problems reported on here, but if you ask me better safe then sorry.

function Sleeper($mSec)
// For dummies like me who spent 5 minutes
// wondering why socket_create wasn’t defined
if(!function_exists(‘socket_create’)) <
die(«Please enable extension php_sockets.dll»);

// So the socket is only created once
static $socket=false;
if($socket===false) <

// Calc time
$uSex = $mSec * 1000;

Илон Маск рекомендует:  Синтаксис JSON

// Do the waiting


Насколько безопасной является функция usleep применительно к pthread ?
У меня возникла проблема с TCP клиент-серверным приложением.
Оно начало грузить проц под 100%
Но стоило мне добавить в основной цикл usleep(100), как все пришло в норму.

Re: usleep

Еще есть вариант с nanosleep :

struct timespec timeOut,remains; timeOut.tv_sec = 0; timeOut.tv_nsec = 5000; /* 50 milliseconds */

Re: usleep

man select, далее по ссылкам?

Re: usleep

(еще один говнокод)

какая именно сторона начала грузить проц?
сервер или клиент?

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

Re: usleep

fd_set rfds;
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 1000;
int retval = 0 ;

Поставил я вот такой код — и проц сразу подскочил до 100% А в случае с usleep все нормально

Re: usleep

>> что у вас используется неправильный подход.

А при чем тут подход ? Наберите программу , в которой будет один бесконечный цикл , поставьте в него usleep и пеосмотрите , что выдает топ

Re: usleep

>один бесконечный цикл
это и есть неправильный подход!

Re: usleep

>for ( ; ; )
зачем тебе это цикл? что в нем?

Re: usleep

Вы стивенса читали ?
Вот его пример сервера :
for ( ; ; )
rset = allset; /* structure assignment */
nready = Select(maxfd+1, &rset, NULL, NULL, NULL);

for (i = 0; i ( 04.09.09 17:29:39 )

Re: usleep

Советую тебе его еще раз перечитать и обратить внимание на maxfd+1

Re: usleep

посмотрев на это пример, я понял, что я его не читал явно к своему счастью!!

Re: usleep

и вообще от фрагмента кода фшоке…

Re: usleep

— ты должен записать в этой структуре fd сокета который ты ждешь на событие — иначе ничего хорошего не будет.

тебе действительно нужен таймаут в одну миллисекунду? У тебя в rfds уже какой-то номер файлового десктиптора, и 1000 раз в секунду тебе select возвращает что на этом fd есть данные (ессно ты их потом в своем цикле не считываешь) — вот у тебя и есть загрузка проца.

Почитай man select на предмет дескриптора, и пореже ставь таймауты от балды на одну миллисекунду.

Re: usleep

tv, вроде, надо выставлять перед каждым вызовом select.


gcc (GCC) 4.6.3 c89 Я пытаюсь использовать usleep. Тем не менее, я продолжаю получать следующее предупреждение: неявное объявление функции usleep…

Я написал C-код для включения и выключения некоторых светодиодов. На самом деле, я хочу вызвать их точными для музыки, но…

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

Мне нужно задержать continueвыполнение цикла на определенное количество микросекунд. Тем не менее, я хочу, чтобы остальная часть цикла работала, а…

Я новое программирование в android. Недавно я делал проект с Android studio. В моем приложении я создаю действие с двумя…

Предполагается, что мне будет дано число для передачи функции thread_mutex initialize для использования в качестве генератора семян rondom для usleep()….

Я столкнулся с интересной проблемой с моим домашним сервером в C. Основная часть суммируется следующим образом: while(donotend==1)< if (somethingdetected==1)< //do…

Я делаю алгоритм блокировки, и я только что понял, что добавление тайм-аута к такому алгоритму не так просто, если он…

Учимся правильно оформлять код на C на примере open source проектов

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

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

Научиться правильному оформлению кода можно, например:

  • из книг и журналов;
  • из руководств в сети;
  • из общения с коллегами;
  • на собственном опыте.

Другой, не менее интересный, подход — взять проверенный временем открытый проект и разобраться в том, какие решения принимали его разработчики. Хорошим примером в этом случае будет ядро Linux.

Для новичка или даже для опытного разработчика, разбор кода ядра Linux может оказаться непростой задачей. Однако наша цель не присоединиться к ним, а просто рассмотреть детали реализации.

Давайте посмотрим на пример реализации функции из исходного кода Linux:

Код выглядит чистым и понятным:

  • Он короткий, всего несколько строк.
  • Подробная сигнатура функции.
  • Код хорошо документирован.
  • Код правильно и последовательно структурирован.
  • Понятные имена переменных.

Тот же код, написанный другим разработчиком, может выглядеть так:

Стиль написания кода очень сильно влияет на его читаемость. Поэтому время, потраченное на тренировку и периодические код-ревью, всегда окупится.

Давайте теперь посмотрим на код ядра Linux с помощью CppDepend и попробуем разобраться, какими правилами руководствовались разработчики.


Модульность — это техника дизайна приложений, которая обеспечивает повторное использование кода и облегчает его поддержку.

Для процедурного языка, такого, как C, в котором нет пространств имен, классов или компонентов, мы можем разделять модули, помещая код в отдельные файлы и директории.

Мы можем использовать два подхода:

  • Положить все исходники в одну директорию
  • Объединить файлы, относящиеся к одному модулю в одну директорию.

В случае с ядром Linux директории и поддиректории используются для обеспечения модульности кода ядра.


Инкапсуляция — это скрытие внутренних деталей реализации. В C инкапсуляция обеспечивается за счет ключевого слова static . Функции и переменные, помеченные как статические, позволяют обращаться к ним только из того же файла.

Давайте посмотрим на статические функции с помощью следующего запроса в CQLinq:

Мы можем использовать панель Метрик (Metric view) чтобы оценить код в целом. На этой панели код представлен в виде дерева (Treemap). Древовидная структура, используемая в CppDepend показывает иерархию кода:

  • Директории в проекте.
  • Файлы в директориях.
  • Структуры, функции и переменные в файлах.

Дерево проекта позволяет наглядно представить результаты запроса CQLinq.

Видно, что множество функций — статические.

Теперь давайте найдем статические поля:

В коде ядра Linux инкапсуляция используется каждый раз, когда доступ к функции или переменной должен быть разрешен только из того же файла.

Используйте структуры для своих данных

В C функции используют переменные для работы. Переменные могут быть:

  • статическими;
  • глобальными;
  • локальными;
  • полями структур.

В каждом проекте есть модель данных, которая используется в различных модулях. Использование глобальных переменных для представления этой модели — это возможное решение, но плохое. Используйте структуры для группировки данных.

Давайте найдем все глобальные переменные с примитивным типом:

Их всего несколько, и, возможно, мы могли бы сгруппировать их в структуры, например ( elfcorehdr_addr и elfcorehdr_size ) или ( pm_freezing и pm_nosig_freezing ).

Функции должны быть краткими и понятными

Вот совет из linux coding style по поводу длины функции:

Функции должны быть короткими и понятными, делать только одну вещь. Они должны занимать один или, максимум, два экрана текста (экран по ISO/ANSI имеет размер 80×24). Функция должна делать одну вещь, и делать ее хорошо.

Максимальная длина функции обратно пропорциональна ее сложности и количеству уровней вложенности. Так, если у вас, например, простая функция с одним, но большим case-выражением, она может быть длинной.

Давайте найдем все функции, длина которых больше 30 строк:

Всего немного методов занимает больше 30 строк.

Количество параметров функции

Функции с количеством параметров большим, чем 8 (NbParameters > 8), трудно вызывать. Также, их вызов плохо сказывается на производительности. Вместо этого мы можем передавать в них структуру с необходимыми значениями.

Только два метода принимают больше, чем 8 параметров.

Количество локальных переменных

Методы, в которых используются более 8 локальных переменных (значение NbVariables) тяжело понимать и поддерживать. Методы, в которых 15 и более локальных переменных очень сложны и их следует разбивать на более мелкие (кроме тех случаев, когда код сгенерирован сторонним инструментом).

Только в пяти функциях используется более 15 локальных переменных.

Избегайте сложных функций

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

Есть несколько более комплексных метрик:

  • Cyclomatic complexity — популярная метрика, показывающая количество ветвлений в коде.
  • Nesting Depth — is a metric defined on methods that is relative to the maximum depth of the more nested scope in a method body.
  • Max Nested loop — максимальный уровень вложенности в методе.

Максимально допустимые значения этих метрик устанавливаются руководителем, здесь нет стандартных значений.

Давайте посмотрим на функции, которые можно упростить:

Илон Маск рекомендует:  Что такое код readline_completion_function

Только небольшое количество функций можно признать сложными.

Соглашения об именовании

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

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

Имена только 4 структур начинаются с «_» вместо строчной буквы.

Отступы и выравнивание

Отступы очень важны для того, чтобы код был читаем. Вот что пишут об этом на странице linux coding style:

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

Некоторые могут возразить, что отступ в 8 пробелов делает код слишком широким, особенно на 80-знаковой строке терминала. Ответ: Если вам понадобилось более трех уровней отступа, вы что-то делаете неправильно и вам следует переписать этот участок.


Чтение кода open-source проектов всегда идет на пользу вашему опыту. При этом нет необходимости скачивать и собирать проект, достаточно просто просматривать код, например, на GitHub.

Unofficial Skyrim Legendary Edition Patch / USLEEP

На заметку.
— Патч в 2-х вариантах, русский текст + русская озвучка (для тех кто играет с русской озвучкой) и русский текст + английская озвучка (для тех кто играет с англ. озвучкой)

Внимание. Патч имеет приоритет исполняемого файла esp. как esm., то есть формально исполняемый файл esp. будет иметь формат .esp, но будет приниматься игрой и лаунчером как .esm файл.
Это важно. Смотрите описание порядка загрузки в лаунчере ниже. И не игнорируйте это, иначе у вас по прежнему будут происходить такие проблемы как не поглощение душ драконов или крах игры и тому подобное.

Всеобъемлющее исправление ошибок в игре Skyrim LE . Цель Unofficial Skyrim Legendary Edition Patch ( USLEEP ) является в конечном итоге исправить каждую ошибку в Скайриме, в одном простом пакете, для основной игры и всех 3-х DLC в одном общем патче!

Что входит:
— Исправления в геймплее, квестах, интеллект NPC и существ, предметов, игровой механики, моделей и текстур, местоположения/расположения/принадлежности объектов мира.

— Устанавливать патч можно в любое время игры (НО, очень и настоятельно рекомендуется начинать игру сначала, чтобы все исправления и изменения вступили в силу), но нельзя удалять патч уже в процессе игры, так как изменения не обратимы! Вы предупреждены!

* После получения подтверждения того, что изменения продолжительности магического эффекта для Лососёвой икры (представленные в DLC Hearthfire) были фактически преднамеренными, мы удалили эти исправления из патча.
* Данные crReduceDamage05 и crReduceDamage075 были изменены в старом патче USKP 2.1.3 из-за ошибки в интерпретации того, что эти перки должны делать. Поскольку нет документации оригинального отчета, объясняющей, почему это было сделано, эти изменения удалены. (Ошибка № 25813)
* Старое исправление в старом патче USKP 1.2.4, позволяющее запретить игре воспроизводить сцену Фаренгара в квесте Дом Пожирателя мира (MQ303), если он был мёртв, неправильно проверяло его псевдоним, не проверяя, был ли он действительно сперва выполнен. Если он был мёртв достаточно долго, он не выполнялся, но Папирус возвращал результат, как если бы он был ещё жив, а затем все равно запускал сцену. (Ошибка № 25519)
* В исправленном эффекте Рунного молота Стражи Рассвета (UDGPDLC1HunterHammerRuneFireFFLocation) отсутствовало ключевое слово MagicDamageFire, которое должно было быть. (Ошибка № 25589)
* В предыдущем исправлении для Херна и Херта, их пакеты AI были назначены неправильно. У Херта должны быть пакеты AI с лесопилкой, а Херн должен был использовать разделочную колоду перед домом. Это изменение исправит невозможность купить бревна у мельницы, а также сможете сами распилить их после получения одобрения у Херта. (Ошибка № 26464)
* Сырные круги кровоточили при выстреле или взломе из-за неправильной настройки материала, назначенной при исправлении отсутствия звуков падения. (meshes \ clutter \ food \ cheesewheel01a.nif, mesh \ clutter \ food \ cheesewheel01b.nif, mesh \ clutter \ food \ cheesewheel02a.nif, mesh \ clutter \ food \ cheesewheel02b.nif) (Ошибка №23058)
* У невидимого ребенка (не понял сути, то ли невидимый, то ли в скрытности) (WICastMagic01) была неверная проверка обнаружения в псевдониме CastingActor, которая вызывала сбой события при каждом его запуске. Это исправление отменяет часть ошибки # 17867. (Ошибка № 26781)

* Убеждая или запугивая разбойников в Башнях Вальтейма, они сразу же после этого становились враждебными. Они должны были иметь 60 секундный таймер, но это было проигнорировано из-за того, что забыли убрать продвижение по квесту в диалоге. (Ошибка № 24740)
* Щит Фалмера не должен был иметь ключевое слово ArmorHeavy, так как никакие другие щиты не используют их, и это мешало использованию перка Магическая броня. Это частично отменяет исправления для ошибки # 22958.
* Предыдущее исправление в предыдущем патче, сделанное для подземелья Ангарвунд, в итоге сделало невозможным получить ключ, если вы убили Медреси Дрен до того времени, когда она обычно давала его вам. (Ошибка № 24797) [NR]
* Посох обморожения был настроен на использование неверного типа для медленного эффекта, потому что это было исправлено в предыдущей версии патча. (Ошибка № 25196)
* Зачарования, управляющие Бледным Клинком, были когда-то исправлены, чтобы обеспечить дополнительный эффект выносливости, чтобы удовлетворить двойной урон выносливости. Однако это было неверно, потому что стандартный эффект урона от холода уже имел второй second AV weight of 2, который удваивает этот урон. Таким образом, клинок неправильно наносил 3-х кратный урон. Это исправляет ошибку # 10179. (Ошибка № 25291)
* Патч очищен с помощью xEdit 4.0.1 для удаления дополнительных ITM, которые не были видны ранее.

Dawnguard DLC
Hearthfire DLC
Dragonborn DLC

При переходе от отдельных патчей на этот:
— Обязательно удалите все файлы от предыдущих версий патчей, если у вас они были установлены, то удалить следующее:
Unofficial Skyrim Patch.bsa, Unofficial Skyrim Patch.esp, Unofficial Skyrim Patch.ini
Unofficial Dawnguard Patch.bsa, Unofficial Dawnguard Patch.esp
Unofficial Hearthfire Patch.bsa, Unofficial Hearthfire Patch.esp
Unofficial Dragonborn Patch.bsa, Unofficial Dragonborn Patch.esp
— Установите данный вариант патча (Легендарный). В общем все предыдущие патчи которые были по отдельности не нужны.

Установка :(можно вручную или через NMM/MO менеджеры)
1.Устанавливайте все 3 файла в папку Data в игре:
Unofficial Skyrim Legendary Edition Patch.bsa
Unofficial Skyrim Legendary Edition Patch.esp
Unofficial Skyrim Legendary Edition Patch.ini — это файл с параметрами необходимыми для работы патча

Порядок загрузки в лаунчере или менеджере модов:

Skyrim.esm (в лаунчере может быть невидимым,но он подключен в скрытом режиме)
Update.esm (в лаунчере может быть невидимым,но он подключен в скрытом режиме)
Unofficial Skyrim Legendary Edition Patch.esp (это неоф патч USLEEP)
[ниже другие esm. файлы от модов если таковые имеются]
HighResTexturePack01.esp (это файл от HD пакета текстур от Bethesda, если такой имеется)
HighResTexturePack02.esp (это файл от HD пакета текстур от Bethesda, если такой имеется)
HighResTexturePack03.esp (это файл от HD пакета текстур от Bethesda, если такой имеется)
Unofficial High Resolution Patch.esp (это файл от неоф.патча Unofficial High Resolution)
[ниже другие моды имеющие esp. файлы]

Свободные скрипты в Data/Scripts:
— Проверьте: dragonactorscript.pex и / или mqkilldragonscript.pex. Удалите их, если таковые у вас присутствует в Data/Scripts. Они из драконьих модов.
— DSAMG — Dragon Soul Absorb More Glorious и Diversified Dragons. Эти моды должны быть обновлены с помощью патча, который должен включать исправления из USLEEP.

Как отвязать от старых патчей и привязать к новому :(через TES5Edit — спасибо Гравицапа)
1. В ТES5Edit открываем usleep.esp и esp, который хотим править.
2. Пкм на нашем esp — add masters. Выбираем usleep.esp.
3. Идём в ветку file header нашего мода. Находим строчки со старыми версиями патчей. Пкм на masters — remove.
4. Пкм на самом нашем esp — check errors. Скрещиваем пальцы. Если выдал ошибки — придётся сидеть и разбирать каждую.
5. Закрываем крестиком программу, ставим галочку на сохранить.
6. Снова открываем наш мод в TES5Edit.
7. ПКМ на моде — sort masters
8. Снова сохраняемся.
Внимание! Способ годится для небольших модов и патчей. На свой страх и риск!

Как отвязать от старых патчей и привязать к новому :(через Wrye Bash и TES5Edit — спасибо KOT-666)
— Смотрите скриншот инструкцию

usleep — Откладывает выполнение на микросекунды

(PHP 4, PHP 5, PHP 7)

Илон Маск рекомендует:  Как добавить всплывающую подсказку к изображению

usleep — Откладывает выполнение на микросекунды


Откладывает выполнение программы на указанное число микросекунд.

Список параметров

Время откладываемого исполнения в микросекундах. Микросекунда — это одна миллионная секунды.

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

Эта функция не возвращает значения после выполнения.


Пример #1 Пример использования usleep()

// Текущее время
echo date ( ‘h:i:s’ ) . «\n» ;

// ждать 2 секунды
usleep ( 2000000 );

// вернуться к исполнению
echo date ( ‘h:i:s’ ) . «\n» ;

Результат выполнения данного примера:

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

  • sleep() — Откладывает выполнение
  • time_nanosleep() — Откладывает исполнение на заданное число секунд и наносекунд
  • time_sleep_until() — Откладывает исполнение скрипта до заданного времени
  • set_time_limit() — Ограничение времени выполнения скрипта

implicit declaration of function usleep

I am trying to use usleep . However, I keep getting the following warning:

implicit declaration of function usleep

I have included the unistd.h header file.

The man pages mentions something about this. But I am not sure I understand by it:

But not sure what I a to do with the above?

5 Answers 5

That list is the pre-conditions for having usleep defined. It’s basically a C-like expression involving #define variables which has to be true before including the header file.

The header file itself will only define usleep inside what is usually a massive nest of #ifdef statements and the developers have taken the time to tell you what you need to do so that you don’t have to spend hours trying to figure it out yourself :-)

Assuming you’re using a glibc 2.12 or better, it means you either have to:

  • declare _BSD_SOURCE; or
  • declare a complicated combination of three other things, which I won’t bother to decode.

Probably the easiest fix is to simply compile with gcc -D _BSD_SOURCE or put:

in the code before you include the header file that gives you usleep .

You’ll probably want to define these before any includes in case there are dependencies between the various header files.

This may work: Add -std=gnu99 when compiling with gcc on Linux.

If you need to get legacy code that uses usleep() to compile, add these lines to a header file that you include before any other libraries:

Or add the compiler flags -std=c11 -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200112L to your makefile.

That tells the environment that your program uses this older version of the UNIX API, in which usleep() was not deprecated.

Alternatively—and if this is new code, definitely—replace usleep() with nanosleep() , set the feature-test macros appropriately for your version of the library, and review your codebase for other bit rot.

On Linux, you can check which values of _XOPEN_SOURCE and _POSIX_C_SOURCE your library supports in man feature_test_macros .

The Complete Picture

Longer answer: Here’s what’s going on.

There historically were several different UNIX standards, and the eventual best practice everyone hit on was to have the code specify what version of the UNIX API it was written for. Programmers did this by defining a feature-test macro.

One of the earliest splits in UNIX was between AT&T’s System V and the Berkeley Standard Distribution (BSD) from the University of California. Since System V was the official version and its behavior became the default, whereas BSD Unix was some of the earliest free software and used in many universities, it’s much more common to see legacy code declare _BSD_SOURCE than _SVID_SOURCE . The _BSD_SOURCE macro especially tries to enable extensions from a wide variety of different operating systems over a period of more than forty years. Sometimes, it’s even used as a catch-all for non-standard extensions. Both macros are deprecated, and contrary to the currently-accepted answer, you should never use either one in new code.

In this century, there were two UNIX standards, POSIX, which became an IEEE standard, and the Single Unix Specification (SUS) from the Open Group (X/Open). The X/Open SUS is a superset of POSIX and what you would normally write for. There used to be a number of different feature-test macros that you could declare to enable then-current versions of these standards, and these are still supported for backward compatibility. You can see some of them in the conditional you pasted, but you don’t need to worry about them when you write new code. One macro that code checks, _XOPEN_SOURCE_EXTENDED , is now obsolete, but historically selected a version of the SUS from 1995.

In theory, the correct feature-test macro to set on any modern version of UNIX or Linux is _XOPEN_SOURCE . You should look up the most recent version number that your library supports. In practice, I think it’s prudent defensive coding to also define _POSIX_C_SOURCE , in order to guarantee that nobody else can set it inconsistently and break your code. Your question is a good example: if you set _XOPEN_SOURCE for backward-compatibility, but _POSIX_C_SOURCE gets set to a more recent version elsewhere in your toolchain, the higher version of _POSIX_C_SOURCE will take precedence and usleep() will not work.

So, what those conditionals mean is that usleep() was not a POSIX function, but was at one time present on some BSD-like OSes, and therefore made it into the SUS in 1995. It was deprecated in 2008, and selecting any version of POSIX or the SUS since then actively disables it. Therefore, it’s enabled if you select version 500 or 600 of the SUS (and one other obsolete synonym also turns it on), but deprecated if you select any recent version of POSIX or the SUS. They’re also enabled if you select the anything-goes option, but that’s a bad idea.

Разница между сном() и usleep() в PHP

php usleep vs sleep (4)

Может ли кто-нибудь объяснить мне, в чем разница между sleep() и usleep() в PHP.

Я дал указание использовать следующие сценарии, чтобы сделать приложение чата для длительного вытягивания, но в этом сценарии я получаю тот же эффект, используя usleep(25000); или без usleep(25000);



Аргумент для sleep — секунды, аргумент для sleep — микросекунды. Кроме этого, я думаю, что они идентичны.

usleep(25000) спит только в течение 0,025 секунд.

sleep() позволяет вашему коду спать в считанные секунды.

  • sleep(5); // sleeps for 5 seconds

usleep() разрешает ваш код в микросекундах.

  • usleep(2500000); // sleeps for 2.5 seconds

Еще одно отличие состоит в том, что sleep возвращает 0 в случае успеха, false в случае ошибки. usleep ничего не возвращает.

usleep() используется для задержки выполнения в «микросекундах», в то время как sleep() используется для задержки выполнения в секундах. Таким образом, usleep(25000) составляет 0,025 секунды.

Код сгенерирован — USleep против станда :: this_thread :: sleep_for

December 2020

271 раз

Я пытаюсь оценить USleep против станда :: this_thread :: sleep_for и видеть больше инструкции, генерируемой при использовании станда :: this_thread :: sleep_for против USleep.

Я вижу 20 при использовании станд :: this_thread :: sleep_for.

Верно ли сделать вывод, что USleep гораздо более эффективным по сравнению с станд :: this_thread :: sleep_for?

2 ответы

Верно ли сделать вывод, что USleep гораздо более эффективным по сравнению с станд :: this_thread :: sleep_for?

Нет . В коде выше, nanosleep(2) является системным вызовом, usleep(3) является функцией библиотеки. usleep(3) внутренний вызов nanosleep(2) . Так что если вы используете usleep(3) , вы не можете увидеть этот ассемблерный код в вашей собственной программе, но они существуют внутри самой функции библиотеки.

Однако, если ваша программа предназначена для сна, может быть, это бессмысленно обсуждать выполнение функции сна.

Кроме того, std::this_thread::sleep_for более портативен, которое должно быть предпочтительным. usleep() даже помечен как устаревший в стандарте POSIX .

Вы можете видеть, что вы сравниваете между различными функциями nanosleep и usleep . C ++ STL использует nanosleep из — за меньшее время зернистости теоретически доступной в API, наносекунды вместо микросекунд.

Еще одним преимуществом nanosleep является то , что обе функции могут быть прерваны , и nanosleep вернется оставшееся время так STL sleep_for может повторно запустить nanosleep в цикле до оставшееся время истекает. Использование usleep вы никогда не знаете , что в режиме реального времени истек в случае прерывания.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL