C++ Konsole automatisch nach 5 Sekunden schließen?

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.


Vando  26.12.2017, 22:00

Wieso öffnet sich bei dir ein cooles Fenster und bei mir nicht?

Edit: Ah, comprendo.

0
vikiller01 
Fragesteller
 26.12.2017, 22:10

Blockt "sleep_for" nicht weitere Ausführungen?

0
regex9  26.12.2017, 22:51
@vikiller01

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.

0
vikiller01 
Fragesteller
 27.12.2017, 12:41

Hat doch funktioniert! Bei der Geduld liegt der Schlüssel zum Erfolg

0