Also, damit Ihr wisst, worum es überhaupt geht: mit dem Programm soll ein Experiment zur Reaktionszeitmessung umgesetzt werden. Die Reaktion (durch die Versuchsperson) erfolgt dabei über ein externes Gerät am Parallelport. Entscheidend ist dabei, die Zeit zwischen Beginn der Abfrage und der Reaktion (signalisiert durch eine Veränderung im Statusregister des Parallelports) möglichst genau zu bestimmen, d.h. mit einer hohen Auflösung (1 ms) und einer hohen Zuverlässigkeit (unabhängig von Störeinflüssen).
Das Windows sowas grundsätzlich nicht zulässt, ist mir schon bekannt. Dennoch versuche ich, die bestmögliche Lösung unter diesen Umständen zu finden. Das System darf während der Zeitmessung komplett lahmgelegt werden, die Versuchsteilnehmer sollen sich ja nicht mit anderen Programmen beschäftigen.
Zitat:
GetTickCount gibt dir auch die Zeit auf die Millisekunde genau.
GetTickCount ist nur auf etwa 10 ms genau, wie u.a.
hier nachzulesen ist. Daher ist
QPC die bessere Lösung.
Meine Frage war, wie lange ein (!) Durchlauf der
repeat Schleife dauert und ob diese Zeit immer gleich ist. Ich habe das jetzt mal so getestet:
Delphi-Quellcode:
procedure WaitLPT;
begin
QueryPerformanceFrequency(Frequency);
QueryPerformanceCounter(StartTime);
repeat
WaitTimeOld := WaitTime; // Letzte Runde
GetState := Inp32($379);
CheckFlag(GetState, Buffer, BufferFull);
QueryPerformanceCounter(StopTime);
WaitTime := (StopTime - StartTime) * 1000 div Frequency;
inc(i);
if i > 100000 then break; // Nach 100.000 Runden -> raus
LoopTime[i] := WaitTime - WaitTimeOld; // Aktuelle Rundenzeit
until BufferFull or WaitTime >= TimeOut;
end;
Das Array (
LoopTime) habe ich dann noch in ein Textfile geschrieben. Dort stehen nur Nullen. Demnach gehe ich davon aus, dass jede Runde weniger als 1 ms gedauert hat. Das ist schon mal gut.
Dann habe ich mir noch die Gesamtzeit angeguckt, die das Programm für die 100.000 Schleifendurchläufe braucht. Die variierte bei meinen Tests zwischen 199 und 312 ms. Das ist eher schlecht. Woran könnte das liegen? Aber solange die Auflösung unter 1 ms bleibt, kann es mir vermutlich egal sein...
Gruß, Valentin