mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-19 09:19:41 +02:00
84 lines
1.6 KiB
ObjectPascal
84 lines
1.6 KiB
ObjectPascal
|
|
// AsyncIO test by Sebastian Guenther, sg@freepascal.org
|
|
// 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.
|