Jak można "przerwać" program w C++ na Win 32 i jakie biblioteki muszą być dołączone?Jak zrobić program snu w C++ na Win 32?
Odpowiedz
#include <windows.h>
Sleep(number of milliseconds);
Lub jeśli chcesz, aby wstrzymać swój program czekając na inny program, użyj WaitForSingleObject.
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));
Mój Boże, ta ostatnia linia jest brzydka. –
@Steve: Moje przeprosiny. –
Nie obwiniam was, chyba że jesteście w komitecie standardowym C++ ;-) –
Jeśli chcesz, aby program pozostawał responsywny podczas "pauzy", ty ne ed, aby użyć zdarzenia licznika czasu.
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. –
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.
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ć.
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
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));
Błąd błąd C3861: "Uśpienie": nie znaleziono identyfikatora // mimo #include –
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
Ok, musisz mieć nowoczesną i tak dalej, a stare po nich, czy to reguła? Przynajmniej działało to z tą kolejnością. –