在Linux上用C语言编写半秒睡眠程序

qlvxas9a  于 2022-12-02  发布在  Linux
关注(0)|答案(1)|浏览(148)

我就是找不到一种方法让我的程序休眠或者让它等待一定的毫秒数,我试过sleep(),但它只能工作整整几秒,usleep()给出了隐式声明错误,并将其纠正为sleep(),nanosleep()也只能暂停整整几秒。

while(1){
        wclear(win);
        box(win, 0, 0);
        mvwprintw(win, 0, anim, "Snake");
        wrefresh(win);

        sleep(500);

        if(intro == 3){
            if(anim < 53) anim++;
            else intro--;
        }
        if(intro == 2){
            if(anim > 2) anim--;
            else intro--;
        }
        if(intro == 1){
            if(anim < 23) anim++;
            else intro--;
        }
        if(intro == 0) break;
    }

所有我想要的是使一个平滑的小动画,但无论我使用什么库或什么样的睡眠功能,我使用,它将要么做完整的秒这是太长,或0秒(所以什么都没有),或抛出错误。

fhg3lkii

fhg3lkii1#

这里有一些想法来探索为什么usleep不起作用。select是另一种流行的延迟时间的方法。

#include <unistd.h>
int main( )
{
  int i;
  for ( i = 0 ; i < 10 ; i++ ) usleep(100000);
  return 0;
}

此外,尝试使用编译器来揭示unistd.h的来源,就像gcc的情况一样

gcc -H main.c 
. /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/unistd.h
. . . MORE . . .

另一个有用的想法是输出预处理器输出,如下所示:

gcc -E main.c 

# 1 "main.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 370 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "main.c" 2
# 1 "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/unistd.h" 1 3 4
# 71 "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/unistd.h" 3 4

. . . MORE . . .

下面是一些使用select创建超时的代码。

#include <unistd.h>
#include <stdio.h>
int main( )
{
  fd_set set;
  struct timeval timeout;
  FD_ZERO(&set);
  timeout.tv_sec = 0;
  timeout.tv_usec = 100000;
  if (0==select(FD_SETSIZE, &set, NULL, NULL, &timeout)) printf("timeout\n");

  return 0;
}

相关问题