[gelöst] int time.elapsed() to int?

Alles rund um die Programmierung mit Qt
Antworten
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

[gelöst] int time.elapsed() to int?

Beitrag von 24dan »

laut docu sollte time.elapsed() mir die vergangen Zeit als int-Wert auswerfen oder habe ich was überlesen und falsch verstanden?

Code: Alles auswählen

QTime time;
time.start();

int i;
i = time.elapsed();
gibt nur 0
Zuletzt geändert von 24dan am 12. April 2010 22:12, insgesamt 1-mal geändert.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Das elapsed ist doch direkt der nächste Aufrufnach dem start, da kann es durchaus möglich sein, dass noch keine Zeit vergangen ist. Du hast nen Prozessor im Gigahertzbereich, dein Arbeitsspeicher läuft minimum im Megahertzbereich. Da sind millisekunden einfach zu grob :P

Mach doch dazwischen ein qSleep(), dann wirst du time.elapsed() > 0 erhalten.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

Also bitte, ich bin unwissend faul, müde, unlustig, langweilig, eben ein nerd aber doch nicht doof.....
:shock:

Das war doch nur ein bsp natürlich mache ich nicht gleich danach elapsed(),
:wink:
es geht einfach nicht.... :cry:

ein qDebug() << time.elapsed(); gibt mir zum gleichen Zeitpunkt 16ms raus....
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Dann poste bitte Beispielcode, mit dem man dein Problem nachvollziehen kann. So kann man nämlich überhaupt nichts sagen.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

Also der Source ist ganz sicher unverständlich aber er zeigt wie ich QTime verwende...

Code: Alles auswählen

TEIL * Auswertung::objekteFuellen( TEIL *anf_TEXT)
{
   TEIL *anf_ABSATZ = new TEIL;
   TEIL *anf_SATZ   = new TEIL;
   TEIL *anf_WORT   = new TEIL;
   TEIL *anf_BST    = new TEIL;
   unsigned long i_owb = 1;
QTime time;
   time.start();
   
   QString text = this->qs_text;
   text.replace(". ", ".");
   text.replace(".# ","#");
   text.simplified();
   QStringList l_absaetze = text.split("#",QString::SkipEmptyParts);
   anf_TEXT->l_text = l_absaetze;
   foreach(QString qs_absaetze, l_absaetze) {
       qs_absaetze.trimmed();
       QStringList l_saetze = qs_absaetze.split(".", QString::SkipEmptyParts);
       this->absaetze.append(l_saetze);
       foreach(QString qs_saetze, l_saetze){
           qs_saetze.trimmed();
           QStringList l_worte = qs_saetze.split(" ", QString::SkipEmptyParts);
           foreach(QString qs_wort, l_worte){
               qs_wort.trimmed();
               for(int i = 0; i<qs_wort.length();i++){
                   QChar c_bst = qs_wort[i];
                   TEIL *BST = new TEIL;
                   i_owb = BST->kodieren(c_bst, i_owb);
                   anf_BST = BST->setNext(anf_BST, BST);
               }
               TEIL *WORT = new TEIL;
               anf_BST->aufAddieren(WORT);
               WORT->setFirst(WORT, anf_BST->next);
               anf_WORT = WORT->setNext(anf_WORT, WORT);
               WORT->setNULL(anf_BST);
           }
           TEIL *SATZ = new TEIL;
           anf_WORT->aufAddieren(SATZ);
           SATZ->setFirst(SATZ, anf_WORT->next);
           anf_SATZ = SATZ->setNext(anf_SATZ, SATZ);
           SATZ->setNULL(anf_WORT);
           i_owb = 1; 
       }
       TEIL *ABSATZ = new TEIL;
       anf_SATZ->aufAddieren(ABSATZ);
       ABSATZ->setFirst(ABSATZ, anf_SATZ->next);
       anf_ABSATZ = ABSATZ->setNext(anf_ABSATZ, ABSATZ);
       ABSATZ->setNULL(anf_SATZ);
   }
   anf_ABSATZ->aufAddieren(anf_TEXT);
   anf_TEXT->setFirst(anf_TEXT, anf_ABSATZ->next);


   int z;
   z = time.elapsed();

   qDebug()<<z;

   qDebug("Daten kodiert: %dms", time.elapsed());
   return (anf_TEXT);
}
:roll:

Also kann das sein das die gleiche Aufgabe mal im 16ms und dann wieder in weniger als 1 ms erledigt ist? Oder benutze ich QTime falsch. Ich bekomme selbt bei einer "längeren" Aufgabe (31ms) sowhl mal weniger als 1ms und dann wieder 31ms.
Der int Wert wird wohl richtig geschrieben.
Es muss mit QTime etwas nicht ganz funktionieren
Ausgabe des Programms:
  • 31
    Daten kodiert: 31ms
und dann auch mal:
  • 0
    Daten kodiert: 0ms
Windows ? Echtzeit ? Zeitmessungsproblem ? :?
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Millisekunden kann man eh nicht genau messen. Außer man betreibt mehr Aufwand. Und ja das kann sein, dass die selbe Aufgabe in weniger Zeit gerechnet wird. Wenn der Prozessor weniger ausgelastet ist oder die Daten schon im CPU Cache liegen und nicht erst aus dem RAM geladen werden müssen.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

Hallo Dan,
denkst Du auch daran, das ein Timer die reale Zeit mißt, also die Zeit, die auch auf Deinem Schreibtisch vergeht. Dein Prozess kann stillstehen, wärend ein anderer Prozess die CPU beansprucht. Laß Deinen Code in einer Schleife 1000mal laufen. Das Ergebnis sollte aussagekräftiger sein. Falls immer noch abwechselnd 0 oder 16 Sekunden rauskommen, mußt Du wohl oder übel einen Kobold in Deinem System vertreiben :)
tschüß
Troll.Soft
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

24dan hat geschrieben: Also kann das sein das die gleiche Aufgabe mal im 16ms und dann wieder in weniger als 1 ms erledigt ist? Oder benutze ich QTime falsch. Ich bekomme selbt bei einer "längeren" Aufgabe (31ms) sowhl mal weniger als 1ms und dann wieder 31ms.
Der int Wert wird wohl richtig geschrieben.
Es muss mit QTime etwas nicht ganz funktionieren
Ausgabe des Programms:
  • 31
    Daten kodiert: 31ms
und dann auch mal:
  • 0
    Daten kodiert: 0ms
Windows ? Echtzeit ? Zeitmessungsproblem ? :?
Windows macht bei der Zeit sehr grobe Rundungen, bzw. misst in zu groben Abständen... Es kann sein, dass die Berechnung zB 15 ms gedauert hat, dann werden aber trotzdem 0 ms angezeigt. Bei 16 ms oder mehr werden dann auch 16 ms angezeigt. Wetten du bekommst keine anderen werte als 16 oder 31 ms raus? ;)
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

Exasperation hat geschrieben: Wetten du bekommst keine anderen werte als 16 oder 31 ms raus? ;)
Hee ja ist tatsächlich verdächtig häufig 31 und 16 sonst nix, bei annähend gleicher Aufgabe die vom Programm zu leisten ist. :roll:
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Antworten