2009-02-12 4 views
3

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

спасибо!

+0

Какую операционную систему вы программируете? –

+0

Что вы подразумеваете под C-компонентом? – starblue

ответ

7

В POSIX есть

usleep(500); 

и

nanosleep(...); 

взглянуть на руководство по usleep(3) и nanosleep(2). EDIT: nanosleep кажется, теперь, чтобы идти, usleep даже устарел в POSIX.2008 в соответствии с его страницей!

3

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

Sleep(500); 

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

0

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

+0

Обратите внимание, что использование функции sleep() может не работать должным образом, если вы также используете будильник(). –

7

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

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

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

Для программ новее POSIX-стиле (мой Gentoo Linux окно»страницы человека говорит, что это 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() называется «гет», и получает остаток от времени, если сон как-то прерывается. Здесь я оставил его в NULL для простоты. Вы можете сделать цикл до тех пор, пока не будет (достаточно близко) до нуля, чтобы убедиться, что вы действительно спали, независимо от каких-либо перерывов.