оператор ожидания в C-компоненте? - PullRequest
3 голосов
/ 12 февраля 2009

Есть ли оператор ожидания в c-компоненте? например, подождать 0,5 секунды, прежде чем продолжить процесс?

спасибо!

Ответы [ 4 ]

7 голосов
/ 13 февраля 2009

Чтобы подвести итог и исправить незначительную проблему в посте Йоханнеса Вайса (не немецкая клавиатура, извините):

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

#include <unistd.h>
usleep(500000); /* Five hundred thousand microseconds is half a second. */

Для более новых программ в стиле POSIX (на страницах руководства моего Gentoo Linux box написано, что это POSIX.1-2001), вы должны использовать nanosleep (), для которого требуется указатель на структуру, содержащую период ожидания. Сон на полсекунды выглядел бы так:

#include <time.h>
struct timespec t;
t.tv_sec = 0;
t.tv_nsec = 500000000; /* Five hundred million nanoseconds is half a second. */
nanosleep(&t, NULL); /* Ignore remainder. */

Второй аргумент для nanosleep () называется «rem» и получает остаток времени, если сон каким-то образом прерывается. Я оставил это в NULL для простоты здесь. Вы можете делать цикл, пока rem не станет (достаточно близко) к нулю, чтобы убедиться, что вы действительно выспались, независимо от каких-либо прерываний.

7 голосов
/ 12 февраля 2009

В POSIX есть

usleep(500);

и

nanosleep(...);

посмотрите руководство по usleep(3) и nanosleep(2). РЕДАКТИРОВАТЬ : nanosleep, кажется, теперь путь, usleep даже устарел в POSIX.2008 согласно его man-странице!

3 голосов
/ 12 февраля 2009

Для Windows эта функция доступна в API

Sleep(500);

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

0 голосов
/ 13 февраля 2009

режим сна также доступен в POSIX, разница в том, что аргумент указывает число Секунды вместо Миллисекунд, которые процесс должен перевести в режим ожидания.

...