asiotest.pp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // AsyncIO test by Sebastian Guenther, [email protected]
  2. // This file is in the public domain
  3. {$MODE objfpc}
  4. program asiotest;
  5. uses SysUtils, Classes, Crt, FPAsync;
  6. type
  7. TASIOTest = class
  8. protected
  9. FManager: Teventloop;
  10. Input: THandleStream;
  11. MyTimer : Pointer;
  12. procedure InputAvailable(UserData: TObject);
  13. procedure TimerHandler(UserData: TObject);
  14. public
  15. constructor Create(AManager: Teventloop);
  16. destructor Destroy; override;
  17. end;
  18. procedure TASIOTest.InputAvailable(UserData: TObject);
  19. var
  20. b: Byte;
  21. begin
  22. b := Input.ReadByte;
  23. Write('Input available: ');
  24. if b >= 32 then
  25. WriteLn('"', Chr(b), '"')
  26. else
  27. WriteLn('#', b);
  28. case b of
  29. Ord('q'): FManager.Break;
  30. Ord('t'): begin
  31. FManager.RemoveTimerNotify(MyTimer);
  32. writeln('Timer stopped');
  33. end;
  34. end;
  35. end;
  36. procedure TASIOTest.TimerHandler(UserData: TObject);
  37. begin
  38. writeln('Timer');
  39. end;
  40. constructor TASIOTest.Create(AManager: Teventloop);
  41. begin
  42. inherited Create;
  43. FManager := AManager;
  44. Input := THandleStream.Create(StdInputHandle);
  45. AManager.SetIONotify(Input.Handle, @InputAvailable, nil);
  46. MyTimer:=AManager.AddTimerNotify(1000,true,@TimerHandler,nil);
  47. end;
  48. destructor TASIOTest.Destroy;
  49. begin
  50. Input.Free;
  51. end;
  52. var
  53. AsyncIOManager: Teventloop;
  54. app: TASIOTest;
  55. begin
  56. WriteLn('Exit with "q", use "t" to stop the timer handler');
  57. AsyncIOManager := Teventloop.Create;
  58. app := TASIOTest.Create(AsyncIOManager);
  59. AsyncIOManager.Run;
  60. app.Free;
  61. AsyncIOManager.Free;
  62. end.