2010-02-12 13 views

Odpowiedz

20
#include <windows.h> 

Sleep(number of milliseconds); 

Lub jeśli chcesz, aby wstrzymać swój program czekając na inny program, użyj WaitForSingleObject.

+0

Błąd błąd C3861: "Uśpienie": nie znaleziono identyfikatora // mimo #include

+0

Czy możesz umieścić swój kod i jakiego kompilatora używasz? Działa to na mojej maszynie z GCC: #include int main() { Uśpienie (1000); } – IVlad

+0

Ok, musisz mieć nowoczesną i tak dalej, a stare po nich, czy to reguła? Przynajmniej działało to z tą kolejnością. –

7

Jeśli używasz impuls, można użyć thread::sleep funkcję:

#include <boost/thread/thread.hpp> 
boost::system_time time = boost::get_system_time(); 
time += boost::posix_time::seconds(1); 
boost::thread::sleep(time); 

W przeciwnym razie będziesz musiał użyć Win32 API:

#include <windows.h> 
Sleep(1000); 

I, oczywiście, C + + 0x to:

#include <thread> 
std::this_thread::sleep_for(chrono::seconds(1)); 
+0

Mój Boże, ta ostatnia linia jest brzydka. –

+0

@Steve: Moje przeprosiny. –

+1

Nie obwiniam was, chyba że jesteście w komitecie standardowym C++ ;-) –

1

Jeśli chcesz, aby program pozostawał responsywny podczas "pauzy", ty ne ed, aby użyć zdarzenia licznika czasu.

+0

faktycznie, w Qt, jeśli chcecie, aby wasz program był responsywny, a pauza z kawałka kodu, który jest wykonywany z głównego wątku, Nie chcę, aby zdarzenie timeout twojego timera również miało miejsce w głównym wątku. –

0

To zależy od rodzaju programu, który piszesz.

Aplikacja konsolowa może po prostu zadzwonić w tryb uśpienia. Aplikacja GUI prawdopodobnie nie chce tego zrobić, ponieważ wszystkie menu i widżety będą niewrażliwe, a aplikacja nie przerysuje się w tym okresie. Zamiast tego musisz zrobić coś takiego, jak ustawić sam czasomierz z oddzwanianiem, gdy wygasa.

0

Nie używaj funkcji spania w swoim GUI, jeśli nie jest to zapewnione przez środowisko, z którym pracujesz. Może to powodować problemy z odniesieniami do danych (szczególnie w wątku, który nie jest głównym wątkiem). To może zablokować GUI. To nie jest tylko kwestia spania przez krótki czas, użyj waitmutexes, jeśli musisz to zrobić.

0

Proszę zwrócić uwagę, że powyższy kod był testowany na Code :: Blocks 12.11 i Visual Studio 2012
na Windows 7.

Dla zmuszając do zatrzymania programu lub poczekaj, masz kilka opcji:


  • sen (unsigned int)

Wartość musi być dodatnią liczbą całkowitą wyrażoną w milisekundach. Oznacza to, że jeśli chcesz swój program odczekać 2 sekundy, wprowadź 2000.

Oto przykład:

#include <iostream>  //for using cout 
#include <stdlib.h>  //for using the function sleep 

using namespace std; //for using cout 

int main(void)   
{ 
    cout << "test" << endl; 
    sleep(5000);   //make the programme waiting for 5 secondes 
    cout << "test" << endl; 
    sleep(2000);   // wait for 2 secondes before closing 

    return 0; 
} 

Jeśli nie zdążysz, to prawdopodobnie oznacza parametr jest w sekundę. Więc zmienić to tak:

sleep(5); 

dla tych, którzy się komunikat o błędzie lub problemu przy użyciu sen spróbować zastąpić je _sleep lub uśpienia zwłaszcza na Code :: Bloks.
A jeśli nadal masz problem, spróbuj dodać jedną z tych bibliotek na biggining kodu.

#include <stdio.h> 
#include <time.h> 
#include <unistd.h> 
#include <dos.h> 
#include <windows.h> 
System
  • ("PAUSE")

Prosty "Hello world" Program na aplikacji konsoli okien najprawdopodobniej blisko, zanim będzie można zobaczyć wszystko. To przypadek, w którym można użyć systemu ("Pauza").

#include <iostream>  

using namespace std; 

int main(void)   
{ 
    cout << "Hello world!" << endl; 

    system("PAUSE"); 

    return 0; 
} 

Jeśli pojawi się komunikat "Błąd: 'system' nie został uznany w tym zakresie" wystarczy dodać następujący wiersz na biggining kodu:

#include <cstdlib> 

  • cin.ignore()

Ten sam rezultat można osiągnąć stosując cin.ignore():

#include <iostream>  

using namespace std;  

int main(void)   
{ 
    cout << "Hello world!" << endl; 

    cin.ignore(); 

    return 0; 
} 

  • cin.get()

przykład:

#include <iostream>  

using namespace std;  

int main(void)   
{ 
    cout << "Hello world!" << endl; 

    cin.get(); 

    return 0; 
} 

  • getch()

Tylko nie zapomnij dodać conio.h Biblioteka:

#include <iostream>  
#include <conio.h> //for using the function getch() 

using namespace std;  

int main(void) 
{ 

    cout << "Hello world!" << endl; 

    getch(); 

    return 0; 
} 

Można mieć komunikat informujący używanie _getch() insted getch

1

W języku C++ 11 można to zrobić w standardowych obiektach bibliotecznych:

#include <chrono> 
#include <thread> 
std::this_thread::sleep_for(std::chrono::milliseconds(x));