Можно ли установить для функции сна в C значение от 0 до 1 в ОС Windows?

Следующий код на C работает отлично. Sleep(n) в C принимает аргумент n как целое число, шаблон, создаваемый таким кодом, является быстрым, а в Sleep(1) очень медленным. Я хочу использовать что-то среднее, например, сон (0,5). Есть ли как-то это сделать????? У меня ОС Windows

#include <stdio.h>
#include <stdbool.h>
#include <direct.h>

void main()
{
    char ch='*';
    int i=0;bool flag=true;
    while(0<i<10)
    {
        if (flag)
        {
            ++i;
            for(int j=0;j<i;j++) //For increaing-pattern
            {
                printf("%c",ch);
            }
            printf("\n");
            if (i==10)
            {
                sleep(1);
                flag=!flag;
            }
        }
        else if (!flag)
        {
            --i;
            for(int j=i;j>-1;j--) //For increaing-pattern
            {
                printf("%c",ch);
            }
            printf("\n");
            if (i==0)
            {
                sleep(1);
                flag=!flag;
            } 
        }
    }
}

Как упоминалось ранее, программа печатает слишком быстро и слишком медленно во время сна (1).

🤔 А знаете ли вы, что...
C имеет строгую типизацию, что способствует обнаружению ошибок во время компиляции.


84
1

Ответ:

Решено

В Windows:

#include <windows.h>

void delay( unsigned long ms )
{
  Sleep( ms );
}

В *nixen/POSIX:

#include <time.h>

void delay( unsigned long ms )
{
  struct timespec t = { .tv_sec = ms / 1000, .tv_nsec = (ms % 1000) * 1000000 };
  nanosleep( &t, NULL );
}

Вызов с указанием количества миллисекунд до сна. Полсекунды будет 500:

delay( 500 );
Н.Б.

Как любезно отметил в комментариях Джонатан Леффлер, из POSIX объявлено устаревшим и удалено следующее:

#include <unistd.h>

void delay( unsigned long ms )
{
  usleep( ms * 1000 );
}