1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // AsyncIO test by Sebastian Guenther, [email protected]
- // This file is in the public domain
- {$ifndef unix}
- {$fatal This test is only for Unix platforms}
- {$endif}
- {$MODE objfpc}
- program asiotest;
- uses SysUtils, Classes, Crt, FPAsync;
- type
- TASIOTest = class
- protected
- FManager: Teventloop;
- Input: THandleStream;
- MyTimer : Pointer;
- procedure InputAvailable(UserData: TObject);
- procedure TimerHandler(UserData: TObject);
- public
- constructor Create(AManager: Teventloop);
- destructor Destroy; override;
- end;
- procedure TASIOTest.InputAvailable(UserData: TObject);
- var
- b: Byte;
- begin
- b := Input.ReadByte;
- Write('Input available: ');
- if b >= 32 then
- WriteLn('"', Chr(b), '"')
- else
- WriteLn('#', b);
- case b of
- Ord('q'): FManager.Break;
- Ord('t'): begin
- FManager.RemoveTimerNotify(MyTimer);
- writeln('Timer stopped');
- end;
- end;
- end;
- procedure TASIOTest.TimerHandler(UserData: TObject);
- begin
- writeln('Timer');
- end;
- constructor TASIOTest.Create(AManager: Teventloop);
- begin
- inherited Create;
- FManager := AManager;
- Input := THandleStream.Create(StdInputHandle);
- AManager.SetIONotify(Input.Handle, @InputAvailable, nil);
- MyTimer:=AManager.AddTimerNotify(1000,true,@TimerHandler,nil);
- end;
- destructor TASIOTest.Destroy;
- begin
- Input.Free;
- end;
- var
- AsyncIOManager: Teventloop;
- app: TASIOTest;
- begin
- WriteLn('Exit with "q", use "t" to stop the timer handler');
- AsyncIOManager := Teventloop.Create;
- app := TASIOTest.Create(AsyncIOManager);
- AsyncIOManager.Run;
- app.Free;
- AsyncIOManager.Free;
- end.
|