C语言 每3秒显示一次

cgvd09ve  于 2023-06-28  发布在  其他
关注(0)|答案(6)|浏览(182)

我不知道如何在每3秒内显示一些东西(比如hello world)。我写的只有C编程与gcc编译器在Linux中。我们可以通过Ctrl+C停止它。我只是想最简单,最简单的方法来操纵我的项目thet代码。
非常感谢您的评分!

20jt8wwn

20jt8wwn1#

while(1) {
    printf("something\n");
    Sleep(3000); //this function counts in milliseconds, so this is what 3 seconds looks like.
}
xoefb8l8

xoefb8l82#

您可能会遇到一个问题,因为标准输出通常是缓冲的,这意味着实现会将输出分批处理,直到方便编写为止。如果你每3秒钟写一次(sleep(3)是一个很好的方法),并且它不是每3秒钟显示一次,试着输入fflush(stdout);或者用`fprintf(stderr,“something\n”)写入标准错误输出;.

8ehkhllq

8ehkhllq3#

sleep(3);

sleep函数使程序等待X秒后返回。请注意,这是在执行之间,所以它不会每隔3秒运行一次命令,但对于大多数目的来说足够接近。此外,一些平台有usleep,其中u代表micro,这可以让你获得更高的分辨率。有关详细信息,请参见手册页。

vulvrdjw

vulvrdjw4#

一般的方法是编写一个无限循环(while (1) { ... }),并在每次执行时暂停程序的执行。
要暂停,您可以使用标准库中的sleep函数。除了只能以秒为单位指定睡眠时间的sleep之外,您还可以使用nanosleep函数,该函数具有更好的精度。

#include <stdio.h>
#include <time.h>

int main()
{
  struct timespec t = { 3/*seconds*/, 0/*nanoseconds*/};
  while (1){
    printf("Wait three seconds and...\n");
    nanosleep(&t,NULL);
    fflush(stdout); //see below
  }
}

请注意,除非你在输出的字符串中添加一个换行符(\n),否则你很可能什么也看不到,因为字符串首先被打印到一个缓冲区,而这个缓冲区偶尔会被刷新到终端(这通常发生在你打印一个换行符时,但即使这样也不能保证每个系统都能刷新)。这就是为什么最好添加fflush调用。

n3schb8v

n3schb8v5#

只是远亲,但我一直使用的一种技术是编写一个程序来显示某个东西 * 一次 *,然后通过使用/usr/bin/watchn 秒重复一次。这样我得到了更多的重用。

2cmtqfgy

2cmtqfgy6#

可以通过**setvbuf()**函数控制流的缓冲区类型。默认情况下,引用文件的流是块缓冲的,而terinals是行缓冲的(stdout)或未缓冲的(stderr)。

#include <stdio.h>

int main(int argc, char* argv[]) {
    setvbuf(stdout, NULL, _IONBF, 0);
    while ( 1 ) {
        printf("Wait 3 seconds... ");
        sleep(3);
    }
}

注意printf中没有**\n**。如果注解掉**setvbuf()**调用,您可以看到在填充缓冲区(通常为1024字节)后,所有输出是如何同时出现的。

相关问题