Gettickcount in Konsolenanwendung..

Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Gettickcount in Konsolenanwendung..

Beitrag von corpsman »

Guten morgen allerseits,

ich habe hier eine Unit gebastelt, in der ich via Synaser Daten weg schicke und dann auf Antworten warte das mache ich in etwa so :

Code: Alles auswählen

 
    // Wir warten auf ein C als Trigger für den Übertragungsstart
    timeout := gettickcount;
    bool := true;
    While bool Do Begin
      res := ReadBytes(10);
      While (res = Nil) And (GetTickCount < timeout + MaxWaitForAnswerTime) Do Begin
        res := ReadBytes(10);
      End;
      If assigned(res) Then Begin
        If res[0] = ord('C') Then Begin
          bool := false;
        End;
      End
      Else Begin
        Writeln('Error device is not in program mode or not responding.');
        ExitCode := 1;
        exit;
      End;
    End;
 
 


ReadBytes (10) versucht so lange Daten zu lesen bis 10 mS lang keine Daten mehr kamen.

Aus einer Normalen Anwendung heraus funktioniert der Code 1a, aber in den Konsolenanwendungen gibts den GetTickCount befehl nicht, da dieser ja in lclintf.pas sitzt und ich diese wiederrum nicht in einer Konsolenanwendung habe.

Mit welcher Variante kann man denn in einer Konsolenanwendung Zeitpunkte messen ?

Oder bleibt mir nichts anderes Übrig als meine Readbytes Routine entsprechend um zu schreiben, dass ich das GettickCount komplett ausbauen kann ?

Gruß

Corpsman
--
Just try it

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Gettickcount in Konsolenanwendung..

Beitrag von mschnell »

Ist ReadBytes von Dir ? Wie ist der Code ? Vermutlich liegt das Problem da.

-Michael

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Gettickcount in Konsolenanwendung..

Beitrag von theo »

Zumindest in Trunk ( SVN Version) kannst du das Package "LazUtils" einbinden. Dort ist GetTickCount drin in "lazutf8sysutils".
Soweit ich sehe, sind in diesem Package reine Utility Routinen ohne Abhängigkeit vom Rest der LCL.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Gettickcount in Konsolenanwendung..

Beitrag von corpsman »

Es geht nicht um ein Problem in dem Sinn.

Mein Code liest beliebig viele Zeichen ein, und wenn 10 ms Lang nichts mehr kommt, erkennt er das als "Terminierung", das ganze wird MaxWaitForAnswerTime lang versucht.

An speziell der geposteten Stelle ( wo ich weis das ich nur 1 Zeichen lese ) kann ich es auch so machen :

Code: Alles auswählen

 
      setlength(res, 1);
      res[0] := fserial.RecvByte(MaxWaitForAnswerTime);
      If fserial.LastError <> 0 Then Begin
        setlength(res, 0);
      End;
      //res := ReadBytes(10);
      //While (res = Nil) And (GetTickCount < timeout + MaxWaitForAnswerTime) Do Begin
      //  res := ReadBytes(10);
      //End;
 


Mein Problem ist daher eher genereller Natur: Ist es generell Möglich in Konsolenanwendungen irgendwie auf eine GetTickCount Variable oder vergleichbaren zu zu greifen ?

Und hier noch der ReadBytes Code..

Code: Alles auswählen

 
Function ReadBytes(TimeOut: Integer): TByteArr;
Var
  b: Boolean;
  cnt: integer;
  bt: Byte;
Begin
  result := Nil;
  If Not assigned(fserial) Then exit;
  b := true;
  cnt := 0;
  setlength(result, 100);
  While b Do Begin
    bt := fserial.RecvByte(TimeOut);
    If fserial.LastError = 0 Then Begin
      result[cnt] := bt;
      inc(cnt);
      If (cnt > high(result)) Then Begin
        setlength(result, high(result) + 101);
      End;
    End
    Else Begin
      b := false;
    End;
  End;
  setlength(result, cnt);
End;
--
Just try it

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Gettickcount in Konsolenanwendung..

Beitrag von theo »

corpsman hat geschrieben:Ist es generell Möglich in Konsolenanwendungen irgendwie auf eine GetTickCount Variable oder vergleichbaren zu zu greifen ?


Habe ich doch oben beantwortet. Nicht gut?

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Gettickcount in Konsolenanwendung..

Beitrag von corpsman »

Sry dein Post war noch nich sichtbar als ich meinen schrieb *g*-

Muss erst mal die Aktuell SVn version laden, die hab ich hier auf Windoof nicht, werde dann berichten *g*.
--
Just try it

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Gettickcount in Konsolenanwendung..

Beitrag von theo »

corpsman hat geschrieben:Muss erst mal die Aktuell SVn version laden, die hab ich hier auf Windoof nicht, werde dann berichten *g*.


Naja, musst du nicht unbedingt. Du kannst die Datei auch hier rauskopieren:
http://svn.freepascal.org/cgi-bin/viewv ... xt%2Fplain

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Gettickcount in Konsolenanwendung.. [gelöst]

Beitrag von corpsman »

Damit gehts,

danke.
--
Just try it

Antworten