Einzelnen Beitrag anzeigen

valjah

Registriert seit: 13. Nov 2006
19 Beiträge
 
Delphi 7 Personal
 
#7

Re: Parallelport-Abfrage mit Timeout

  Alt 26. Mär 2009, 19:28
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
  Mit Zitat antworten Zitat