#include ที่เหมาะสมสำหรับฟังก์ชัน 'sleep' ใน C คืออะไร?


124

ฉันใช้หนังสือ Objective-C ของ Big Nerd Ranch และเริ่มต้นด้วยการให้เราเขียนเป็นภาษา C ในสองสามบทแรก ในโปรแกรมหนึ่งของฉันที่ฉันสร้างขึ้นฉันใช้ฟังก์ชันสลีป ในหนังสือบอกให้ใส่#include <stdlib.h>ใต้#include <stdio.h>ส่วน สิ่งนี้ควรจะกำจัดคำเตือนที่ระบุว่า "การประกาศฟังก์ชัน 'สลีป' โดยนัยไม่ถูกต้องใน C99" แต่ด้วยเหตุผลบางอย่างหลังจากที่ฉันใส่#include <stdlib.h>คำเตือนก็ไม่หายไป .. ปัญหานี้ไม่ได้หยุดโปรแกรมไม่ให้ทำงานได้ดี แต่ฉันแค่อยากรู้ว่า#includeฉันต้องใช้อะไร!


3
บวกหนึ่งสำหรับความกล้าหาญพอที่จะถามคำถามง่ายๆและช่วยเหลือฉัน
Mark Ch

1
หากคุณใช้ IDE ของนายกเทศมนตรี (NetBeans, IntelliJ IDEA, Eclipse) พิมพ์ชื่อของฟังก์ชันใด ๆ จากนั้น Alt + Enter จะนำเข้าไลบรารีที่มีโดยอัตโนมัติ
T04435

2
@ T04435: ในไลบรารี C จะไม่นำเข้า คอมไพเลอร์ไม่ต้องการพวกเขา ตัวเชื่อมโยงอาจเชื่อมโยงได้ แต่หลังจากคอมไพเลอร์เสร็จสิ้นเท่านั้น ใน C คอมไพลเลอร์ต้องการต้นแบบของฟังก์ชันเพื่อใช้ฟังก์ชัน โดยทั่วไปแล้วต้นแบบจะอยู่ในไฟล์ส่วนหัว (.h)
alk

คำตอบ:


163

นอนหลับหน้าคน<unistd.h>บอกว่ามันจะมีการประกาศใน

เรื่องย่อ:

#include <unistd.h>

int ไม่ได้ลงชื่อ (วินาที int ไม่ได้ลงชื่อ);


1
ฉันไม่ได้! ขอบคุณ! มันทำให้ฉันรำคาญเพราะหนังสือบอกว่า <stdlib.h> จะกำจัดคำเตือน ... แปลกฮ่าฮ่า @simonc
trludt

1
จะดีกว่าไหมหากใช้ฟังก์ชัน sleep () หรือ time () เพื่อสร้างการหน่วงเวลา
LandonZeKepitelOfGreytBritn

66

sleep เป็นฟังก์ชันที่ไม่ได้มาตรฐาน

  • บน UNIX <unistd.h>คุณจะต้องรวมถึง
  • บน MS-Windows Sleepนั้นมาจาก<windows.h>ไฟล์.

ตรวจสอบเอกสารประกอบในทุกกรณี


4
เขียนมาตรฐาน C เขียน POSIX คือ
ivotron

ใน UNIX จริง ๆ แล้วการนอนหลับคือการหลับและใช้เวลาในระดับไมโครวินาที (มิลลิวินาที * 1,000) แทนที่จะเป็นวินาที
Agostino

6
อย่าใช้ usleep: "4.3BSD, POSIX.1-2001 POSIX.1-2001 ประกาศว่าฟังก์ชันนี้ล้าสมัยแล้วให้ใช้ nanosleep (2) แทน POSIX.1-2008 จะลบข้อมูลจำเพาะของ usleep ()" linux.die.net/man/3/usleep
Jetski S-type

62

นี่คือสิ่งที่ฉันใช้สำหรับรหัสข้ามแพลตฟอร์ม:

#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif

int main()
{
  pollingDelay = 100
  //do stuff

  //sleep:
  #ifdef _WIN32
  Sleep(pollingDelay);
  #else
  usleep(pollingDelay*1000);  /* sleep for 100 milliSeconds */
  #endif

  //do stuff again
  return 0;
}

2
ทางออกที่ดีมีประโยชน์
HCarrasko

15
usleep () ถูกลบออกใน POSIX.1-2008 ใช้ nanosleep () linux.die.net/man/3/usleep
Jetski S-type


8

sleep(3)อยู่ในไม่unistd.h stdlib.hพิมพ์man 3 sleepในบรรทัดคำสั่งของคุณเพื่อยืนยันสำหรับเครื่องของคุณ แต่ฉันเข้าใจคุณบน Mac เนื่องจากคุณกำลังเรียนรู้ Objective-C, และบน Mac unistd.hคุณต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.