0

我做了一个简单的代码片段来记录用户输入的内容:

#include <stdio.h>
#include <unistd.h>

int main() {
  char letter;
  printf("Enter in a character:");
  scanf("%c", &letter);
  sleep(2);
  printf("Letter was: %c", letter);
  return 0;
}

在这段代码中,它应该在第 8 行休眠 2 秒。

不幸的是, sleep 是一个未定义的引用,即使我有正确的library

有什么办法可以在Windows Vista中解决这个问题?

4

4 回答 4

5

sleep() 是一个 POSIX 函数,但您使用的是 MinGW,它不提供 POSIX 支持。引用http://lists-archives.com/mingw-users/01723-include-library-for-unistd-h-header.html

请记住,mingw 提供的 Unix API 并不比 Microsoft C 运行时提供的更多。(嗯,实际上确实如此,但只是多一点,没有“困难”的事情。)Microsoft C 运行时提供 Unixish 函数,如 open()、read()、close(),但不提供 getuid()、getegid( ),getppid()。

也不是睡眠()。如果你想要一个 POSIX 环境,你需要 Cygwin 或 Windows 上的一些其他 POSIX 支持;见http://en.wikipedia.org/wiki/POSIX#POSIX_for_Windows

如果你只需要 MinGW 给你的 + sleep(),你可以使用 Windows Sleep() 函数(注意它是大写的),它接受一个以毫秒为单位的参数并要求你包含 Windows.h(而不是 unistd.h ); 使用 C查看Windows 中的睡眠功能

于 2012-08-04T21:55:07.900 回答
2

如果程序必须休眠 2 秒,则您已在休眠功能中输入 2000..

Sleep(unsigned int) :- unsigned int 是毫秒数(1 秒= 1000 毫秒)

请在 Sleep(5000) 中将“s”作为大写字母;

并包含头文件 Windows.h

于 2014-12-15T21:10:16.450 回答
1

如果它是未定义的引用,则意味着链接器没有将包含sleep的库链接到您的代码。

您可能已经包含了unistd.h(它为您提供了适当的函数原型),但您还必须链接到包含sleep实现的库。

展示你是如何编译和链接程序的。

于 2012-08-03T01:52:30.547 回答
0

在代码开头包含以下函数,只要您想暂停执行而不会给 CPU 带来额外负担(在 for 循环的情况下)

void sleep(unsigned int mseconds)
{
    clock_t goal = mseconds + clock();
    while (goal > clock());
}
于 2014-01-31T17:04:05.613 回答