C++ Konsole automatisch nach 5 Sekunden schließen?
Hallo. Ich möchte gerne in meinen Quelltext einen Befehl einbauen, welcher mir ermöglicht den Compiler bzw. die Konsole nach einer gewissen Zeit automatisch zu schließen ohne Tastendruck.
Ich habe folgendes versucht aber alles gescheitert:
- std::this_thread::sleep_for(std::chrono::milliseconds(5000)) ~ 5Sek. (thread und chrono habe ich am Anfang includet)
- DestroyWindow (habe ich nicht verstanden wo man das verfluchte WM_CREATE einsetzt)
- _sleep und SetTimer war auch ein Fehlschlag
Kann mir jemand ein Quellcode geben, wie ihr so ein Befehl ausführen würdet.
Ich verwende VS2017 und C++ 11
Danke!
2 Antworten
Hast du schon versucht einfach keine Pause zu setzen und den Sleep Befehl einfach ans Ende zu setzen?
Um den Sleep Befehl auszuführen musst du noch #include windows.h includen. Soweit ich weiß, ist der in einem der Zusatzpaketen drinnen, die man beim Download von VS optinal anklicken muss. Eventuell hattest du beim Download den ausgeschlossen.
Ich hätte es so gemacht (erweiterbar auf Minuten und Stunden):
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <dos.h>
using namespace std;
int main()
{
int sek = 0;
int min;
int stunde;
int gesammtsek = 0;
cout << "Wannacry erfolgreich installiert in sek " << endl;
for (stunde = 0; stunde < 1; stunde++)
{
for (min = 0; min < 1; min++)
{
for (sek = 0; sek < 5; sek++)
{
cout << gesammtsek << endl;
Sleep(1000);
gesammtsek++;
}}}
return 0;
(...) welcher mir ermöglicht den Compiler bzw. die Konsole nach einer gewissen Zeit automatisch zu schließen (...)
Um dich hier einmal erst aufzuklären: Der Compiler übersetzt deinen Code in Maschinencode. Erst danach ist das Programm ausführbar und der Compiler selbst schon lange wieder beendet.
Zu deinem Problem:
Bei mir funktioniert es mit sleep_for ausgezeichnet.
#include "stdafx.h"
#include <chrono>
#include <thread>
int main() {
using namespace std::this_thread;
using namespace std::chrono;
sleep_for(seconds(5));
return 0;
}
Weshalb es bei dir gescheitert ist, müsstest du einmal näher ausführen.
Hat doch funktioniert! Bei der Geduld liegt der Schlüssel zum Erfolg
Ja, das tut es. Wenn bis dahin noch andere Aktionen ausgeführt werden sollen, dann bräuchtest du entweder mehrere Threads (ein Thread führt die Aufgaben aus, ein anderer handhabt das Prüfen der Zeit) oder du machst es z.B. so:
#include "stdafx.h"
#include <ctime>
#include <cstdlib>
#include <iostream>
int main(int, char**)
{
clock_t startTime = clock();
double pastTime = 0;
double delay = 5;
while (pastTime < delay)
{
pastTime = (clock() - startTime) / CLOCKS_PER_SEC;
// do something
}
}
Problem hierbei wäre, dass ein Aufruf in der Schleife blocken könnte, woraufhin die Anwendung doch länger läuft als festgelegt.
Wieso öffnet sich bei dir ein cooles Fenster und bei mir nicht?
Edit: Ah, comprendo.
Probiere ich aus Danke dir!