fpc/packages/fcl-base/examples/asiotest.pp
peter 46f999c582 * fpmake support
git-svn-id: trunk@9899 -
2008-01-24 21:50:42 +00:00

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.