Da zu antworten ist extrem schwierig, weil man für einen nachvollziehbaren Programmfluss entweder Codekommentare oder sinnvolle Variablenbezeichner benötigt. Weiters braucht man möglichst vollständigen Code.
Das Beispiel wirft folgende Fragen auf:
- wie wird im Projekt "asy" (QProcess) auf "asy" (HANDLE) gewandelt
- was geschieht im Nullten Durchlauf (i == 0) und bei i == 99...
- was ist "nSecs" und wie wird es ermittelt
- was ist "n > m" für ein Fall (denn genau bei diesem erhälst du ja CPU=100)
- weisst du was du tust mit "dwLowDateTime"? Ich bin kein Windows-Entwickler, aber ich frage mich
-- was genau "dwHighDateTime" ist und
-- warum in der Doku steht "It is not recommended that you add and subtract values from the FILETIME structure to obtain relative times"
- warum wird nur die Kernelzeit (kt) verwendet und nicht auch die Usertime?
- Weiters können Testprogramme ja tatsächlich zwischen 0 und 100% hin und her wechseln (ein Computerprogramm kann ja gar nichts anderes als "Laufen" oder "Warten"). Von daher kennen wir hier natürlich auch deine Testumgebung nicht (weder das Testprogramm noch der Takt, mit welchem deine Berechnung läuft).
Ausserdem solltest du doch die Zeitberechnung jederzeit im Debugger nachvollziehen können. Wenn das Testprogramm z.B. eine 20% Last ergibt und du 100% erhälst, solltest du in der Lage sein, wenigstens den Fehler eingrenzen zu können (z.B. "Kernelzeit" ist wie erwartet, aber die "Realzeit" stimmt einfach nicht). Falls du mit einem Debugger nicht umgehen kannst, könntest du auch die Berechnung mittels "qDebug()" ausgeben lassen. z.B.
Code: Alles auswählen
qDebug() << "Last-Berechnung" << i << n << m << CPU << nSecs .....;
Das würde dir (und allenfalls auch uns) auch helfen..
hth..