'Communication Event' zur Flankenentdeckung
Vorab: Es hat sich herausgestellt, dass Starten und Stoppen eines Threads für die Kollisionserkennung anscheinend zu
langsam ist! Für andere Gelegenheiten kann es nützlich sein, Polling durch eine Interruptbehandlung zu ersetzen.
NetzHwEreignis.zip
Quelltext-Auszug
....
type
  TEreignisThread = class(TThread)
    private
      port : integer;
    public
      procedure execute; override;
      procedure setPort(pHandle : integer);
      procedure update;
  end;
  TForm1 = class(TForm)
   ....
  private
    NetzHW  : TNetzHW;
    monitor : TEreignisThread;
    procedure updateLed;
  public
    { Public-Deklarationen }
  end;
  .....
procedure TEreignisThread.execute;
var
  dummy : dword;
begin
  while not Terminated do
  begin
    if WaitCommEvent(port,dummy,nil)
    then form1.updateLED; //synchronize(update);
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  NetzHW := TNetzHW.Create;
  netzHW.Start(1);
  updateLED;
  setCommMask(netzHW.GetHandle,EV_CTS);
  monitor := TEreignisThread.Create(true);
  monitor.FreeOnTerminate := true;
  monitor.setPort(netzHW.GetHandle);
  monitor.Resume;
end;
....