Stoppuhr brauche HILFE
-
Servus zusammen,
ich bin am verzweifeln und bekomme mein Programm quasi nicht zum stoppen:-).
es geht um die folgende stoppuhr:
QC:
#include <windows.h>
#include <stdio.h>int main()
{
LARGE_INTEGER iFreq;
LARGE_INTEGER iBegin1, stop1;
double t1=0;QueryPerformanceFrequency(&iFreq);
printf("zum Start Enter druecken");
getchar();
printf("Zeitmessung laeuft...\n");
QueryPerformanceCounter(&iBegin1);while (t1<=10000)
{
QueryPerformanceCounter(&stop1);
t1=double(stop1.QuadPart - iBegin1.QuadPart)/iFreq.QuadPart;
Sleep(1);
printf("Sek: %4.6f\r",t1);}
getchar();
return 0;
}//Komments zum Programm habe ich keine, braucht man egtl hierbei nicht. allerdings habe ich keine ahnung wie ich die uhr stoppe und wieder laufen lassen kann.
fuer hilfe waere ich extrem dankbar da ich es sehr dringend brauche.
Herzlichst
ElBarto
-
Wenn du gerne 10000 Sekunden warten willst, dann hört es halt gefühlt nicht auf

-
ist ja no problemo, sie soll ja auch laufen. nur ab und an möchte ich auch die zeit mal gerne stoppen dies ist mein problem.

-
Versuchs mit GetAsyncKeyState: http://msdn.microsoft.com/en-us/library/ms646293
Beispiel:
#include <Windows.h> #include <stdio.h> int main() { LARGE_INTEGER iFreq; LARGE_INTEGER iBegin1, stop1; double t1=0; QueryPerformanceFrequency(&iFreq); printf("zum Start Enter druecken"); getchar(); printf("Zeitmessung laeuft...\n"); QueryPerformanceCounter(&iBegin1); do { QueryPerformanceCounter(&stop1); t1=double(stop1.QuadPart - iBegin1.QuadPart)/iFreq.QuadPart; Sleep(1); printf("Sek: %4.6f\r",t1); }while (t1<=10 && !GetAsyncKeyState(VK_SPACE)); getchar(); return 0; }
-
muchas gracias, genau diese vk`s habe ich gesucht/gebraucht
-
ok haette es jetzt soweit fertig. meine letzte frage waere: Wie zentriert man einen text in cpp?
-
In cpp verwendet man kein printf
wir haben dafür <iostream> mit std::cout. Zentrieren kannst du z.b. so:#include <iostream> #include <string> #include <iomanip> int main() { std::string text="Zentrierter Text"; int max = 80; max=(max-text.size())/2; std::cout << std::setw(max) << "" << text << std::endl; }Edit: Wenn du es mit printf machen willst musst du auch einfach nur einen for-schleife machen die bis (max-text.size) / 2 geht und die entsprechende Anzahl Lehrzeichen ausgeben.
-
int max = 80; max=(max-text.size())/2;Ist klarer so:
int max=(80-text.size())/2;oder
const int terminal_width = 80; int max=(terminal_width-text.size())/2;In printf geht das gleiche natürlich auch ohne for-Schleife.
char format[5]; sprintf(format, "%s%i%s", "%", 40-strlen(text)/2, "s"); printf(format, text);
-
so die 11:59 deathline habe ich fast bis aufs letzte ausgeschöpft. danke für eure hilfe.
-
auch wenn ich zu spät bin, so wäre
#include <time.h> double time_prog = 0.0; double tstart = clock(); [...] time_prog += clock()-tstart;wohl auch eine einfache und gute Lösung gewesen
-
Der Performancetimer ist wie der Name schon sagt, performanter. Deine Version ist Vergleichsweise langsam.
-
Der Performancetimer kommt aus der windows.h und ist somit Windows-Spezifisch oder?
-
Ja, aber schneller und genauer...
-
Ok, danke.