C'deki 'uyku' işlevi için uygun #include nedir?


124

Big Nerd Ranch'in Objective-C Programming kitabını kullanıyorum ve ilk birkaç bölümde C ile yazmamızı sağlayarak başlıyor. Oluşturduğum programlardan birinde uyku işlevini kullanıyorum. Kitapta bana bölümün #include <stdlib.h>altına koymamı söyledi #include <stdio.h>. Bunun "uyku" işlevinin örtük beyanı C99'da geçersiz "uyarısını ortadan kaldırması gerekiyordu. Ama neden koyduktan sonra #include <stdlib.h>uyarı geçmiyor .. Bu sorun programın düzgün çalışmasını engellemiyor, ama sadece hangisini #includekullanmam gerektiğini merak ettim!


3
artı basit soruyu soracak kadar cesur olduğun ve bana yardım ettiğin için.
Mark Ch

1
Herhangi bir belediye başkanı IDE kullanıyorsanız (NetBeans, IntelliJ IDEA, Eclipse). herhangi bir işlevin adını yazın, ardından Alt + Enter, işlevin bulunduğu kitaplığı otomatik olarak içe aktaracaktır.
T04435

2
@ T04435: C kitaplıkları içe aktarılmaz. Derleyici yok değil onlara ihtiyacımız var. Bağlayıcı olabilir ama sadece onları bağlamak sonra derleyici edilir yapılır . C'de derleyicinin bir işlevi kullanmak için bir işlevin prototipine ihtiyacı vardır . Prototipler genellikle başlık dosyalarıyla (.h) gelir.
alk

Yanıtlar:


163

Uyuyan adam sayfası ilan edildiğini söylüyor <unistd.h>.

Özet:

#include <unistd.h>

işaretsiz int uyku (işaretsiz int saniye);


1
Yapmadım! Teşekkür ederim! bu beni biraz rahatsız ediyordu, çünkü kitap <stdlib.h> 'nin uyarıdan kurtulacağını söyledi ... tuhaf haha ​​@simonc
trludt

1
Gecikme oluşturmak için sleep () işlevini veya time () işlevini kullanmak daha mı iyi olur?
LandonZeKepitelOfGreytBritn

66

sleep standart olmayan bir işlevdir.

  • UNIX'e dahil edeceksiniz <unistd.h>.
  • MS-Windows'ta, Sleepgelen doğrusu olduğunu <windows.h>.

Her durumda belgeleri kontrol edin.


4
C standardına göre. wrt POSIX, öyle
ivotron

UNIX'te, Uyku aslında uyku halindedir ve saniyeler yerine mikrosaniyeler (milisaniye * 1000) sürer.
Agostino

6
Usleep kullanmayın: "4.3BSD, POSIX.1-2001. POSIX.1-2001 bu işlevi geçersiz ilan eder; bunun yerine nanosleep (2) kullanın. POSIX.1-2008 usleep () belirtimini kaldırır." linux.die.net/man/3/usleep
Jetski S-type

62

platformlar arası kod için kullandığım şey bu:

#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
güzel çözüm, kullanışlı
HCarrasko

15
usleep () POSIX.1-2008'de kaldırıldı. Nanosleep () kullanın. linux.die.net/man/3/usleep
Jetski S-type

13

İçin sleep()olması gerektiği

#include <unistd.h>

8

sleep(3)içeride unistd.hdeğil stdlib.h. Tip man 3 sleepmakineniz için onaylayın için komut satırında, ama Objective-C öğreniyoruz beri Mac kullanıyorsanız tahmin ve Mac'te, ihtiyacınız unistd.h.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.