Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C sleep()函数不起作用,打印是即时执行的 静态无效时间延迟(整数秒) { #ifdef_WIN32 睡眠(1000*不超过10秒); #否则 睡眠(无秒); #恩迪夫 } void函数(){ printf(“\t\t加载…\n\t\t”); fflush(stdout); 对于(inti=1;i_C_Sleep_Windows Subsystem For Linux - Fatal编程技术网

C sleep()函数不起作用,打印是即时执行的 静态无效时间延迟(整数秒) { #ifdef_WIN32 睡眠(1000*不超过10秒); #否则 睡眠(无秒); #恩迪夫 } void函数(){ printf(“\t\t加载…\n\t\t”); fflush(stdout); 对于(inti=1;i

C sleep()函数不起作用,打印是即时执行的 静态无效时间延迟(整数秒) { #ifdef_WIN32 睡眠(1000*不超过10秒); #否则 睡眠(无秒); #恩迪夫 } void函数(){ printf(“\t\t加载…\n\t\t”); fflush(stdout); 对于(inti=1;i,c,sleep,windows-subsystem-for-linux,C,Sleep,Windows Subsystem For Linux,根据sleep()manpage 注释 在Linux上,sleep()是通过nanosleep(2)实现的 用过的钟 因此,我重写了您的程序以使用nanosleep。在您使用WSL时,我删除了对Win32的任何引用,仅限Linux。问题是,此程序过早退出nanosleep(),并出现“无效参数”错误。我不明白这是为什么 #ifdef _WIN32 #include <windows.h> #else #include <unistd.h> 这里提到了一个

根据
sleep()
manpage

注释 在Linux上,sleep()是通过nanosleep(2)实现的 用过的钟

因此,我重写了您的程序以使用nanosleep。在您使用WSL时,我删除了对Win32的任何引用,仅限Linux。问题是,此程序过早退出nanosleep(),并出现“无效参数”错误。我不明白这是为什么

#ifdef _WIN32
    #include <windows.h>
#else
    #include <unistd.h>
这里提到了一个解决方法:

我尝试了另一种方法:使用
clock\u nanosleep()
,这样我就可以为时钟选择另一个源:在上面的程序中,只需将调用更改为
nanosleep()
,将另一个更改为
clock\u nanosleep()


时钟单调没有问题,现在程序可以运行了!

根据
sleep()
手册页

注释 在Linux上,sleep()是通过nanosleep(2)实现的 用过的钟

因此,我重写了您的程序以使用nanosleep。在您使用WSL时,我删除了对Win32的任何引用,仅限Linux。问题是,此程序过早退出nanosleep(),并出现“无效参数”错误。我不明白这是为什么

#ifdef _WIN32
    #include <windows.h>
#else
    #include <unistd.h>
这里提到了一个解决方法:

我尝试了另一种方法:使用
clock\u nanosleep()
,这样我就可以为时钟选择另一个源:在上面的程序中,只需将调用更改为
nanosleep()
,将另一个更改为
clock\u nanosleep()


时钟的单调性没有问题,现在程序可以运行了!

不能复制这个。@n.“代词m.你是什么意思?哪个版本不能按预期工作?@WeatherVane它可以一次打印所有的星星。@Archer好的!是真的!我也一样!不能复制这个。@n.“代词m.你是什么意思?哪个版本不能工作正如预期的那样?@WeatherVane它一次打印所有星星。@Archer好的!这是真的!我也一样!我同意,这并不能解决问题。它甚至没有真正解决问题。如何实现
sleep()
,与此无关。它是否按照文档中的方式运行(如果是这样的话,它没有)这是重点。它的行为确实与我在WSL上记录的一样。这是相关的,因为潜在的问题是sleep()使用nanosleep(),nanosleep()使用时钟实时,这在WSL中无法读取。我已经更新了我的答案。
sleep()
在WSL上记录的工作方式(对我来说)。也许在某些WSL提供商上存在缺陷,但这是一个相当非同寻常的说法。WSL的关键点之一是它提供了一个功能齐全的Linux环境。此外,如果某些WSL提供商上确实存在缺陷,这并不一定意味着问题出在
nanosleep()
,但这似乎是合理的。对于某些用户来说,它工作得很好。这里也记录了这个问题:很好。这将是实际答案的基础。“
sleep()
在某些WSL提供程序上无法正常工作,例如[…]”。为什么它不起作用对于OP的问题来说是一个无关紧要的细节。我同意,这并不能解决问题。它甚至也不能真正解决问题。
sleep()
是如何实现的无关紧要。它的行为是否符合文档中的规定(或者如果是这样的话,它没有)这是重点。它的行为确实与我在WSL上记录的一样。这是相关的,因为潜在的问题是sleep()使用nanosleep(),nanosleep()使用时钟实时,这在WSL中无法读取。我已经更新了我的答案。
sleep()
在WSL上记录的工作方式(对我来说)。也许在某些WSL提供商上存在缺陷,但这是一个相当非同寻常的说法。WSL的关键点之一是它提供了一个功能齐全的Linux环境。此外,如果某些WSL提供商上确实存在缺陷,这并不一定意味着问题出在
nanosleep()
,尽管这似乎是合理的。对于一些用户来说,它工作得很好。这里也记录了这个问题:很好。这将是实际答案的基础。“
sleep()
在某些WSL提供商上无法正常工作,例如[…]”。它为什么不能工作,对于OP的问题来说,是一个无关紧要的细节。
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <errno.h>

void timeDelay (time_t no_of_seconds)
{
  struct timespec req, rem;
  int res;

  req.tv_sec = no_of_seconds;
  req.tv_nsec = 0;

  do
  {
    rem.tv_sec = 0;
    rem.tv_nsec = 0;
    res = nanosleep (&req, &rem);
    req = rem;
  }
  while (res == EINTR);
  if (res)
    perror("nanosleep");
}

void somefunction()
{
  printf("\t\t Load ... \n\t\t");
  fflush(stdout);
  for (int i = 1; i <= 60; i++)
  {
    fflush(stdout);
    timeDelay(1);
    putchar('*');
  }
}

int main()
{
  somefunction();
  return 0;
}
$ sleep 1
sleep: cannot read realtime clock: Invalid argument
clock_nanosleep (CLOCK_MONOTONIC, 0, &req, &rem);