Unter DOS hab ich gerne den Int 15h - Unterfunktion 83h verwendet. Dem konnte man eine Zeit vorgeben und die Adresse einer beliebigen byte-Variable im Speicher. Dann rief man ihn auf und bekam sofort wieder die Kontrolle zurück. Nach Ablauf der Zeit wurde die Variable gesetzt und man konnte sie abfragen.
Das sah ungefähr so aus:
Code: Alles auswählen
procedure tserial.starttimer;
 
  var ober,unter : word;
      offs,segment : word;
 
 begin
  flag := 0;
  offs := ofs(flag);
  segment := seg(flag);
  case s of
   2 : begin
        ober := $001E;
        unter := $8480;
       end;
  end;{case}
  asm
   mov ah,$83
   mov al,0
   mov es,segment
   mov bx,offs
   mov cx,ober
   mov dx,unter
   int $15
  end;
 end;Code: Alles auswählen
function tserial.transfer;
 
  var st : string;
      a : byte;
      c : char;
 begin
  st := s + prfs(s);
  transfer := false;
  send_string(com,dc2,dly);
  dwrite('<DC2>');
  starttimer(2);
  repeat until (zeichenempf = dc4) or (flag <> 0);
  if flag <> 0 then exit;
  st := stx + st + etx;
  dwrite('[DC4]'+st);
  send_string(com,st,dly);
  starttimer(2);
  repeat until (buffercheck(com)) or (flag <> 0);
  if buffercheck(com) then check_buffer(com,c);
  if c = ack then
   begin
   dwrite('[Ack]');
   transfer := true
   end
   else
   begin
   dwrite('[NAK]');
   transfer := false;
   end;
 end;Gibt es da vergleichbares? (Sei es in der Riesen-RTL von Lazarus oder bei den Win-API-Funktionen)
Wie würdet ihr das lösen?
Der direkte Zugriff auf Ports, Speicher und InterruptserviceRoutinen feeeeeeehlt mir sooooo
Danke für die Aufmerksamkeit
Christian