asiotest.pp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // $Id$
  2. // AsyncIO test by Sebastian Guenther, [email protected]
  3. // This file is in the public domain
  4. {$MODE objfpc}
  5. program asiotest;
  6. uses SysUtils, Classes, Crt, AsyncIO;
  7. type
  8. TASIOTest = class
  9. protected
  10. FManager: TAsyncIOManager;
  11. Input: THandleStream;
  12. procedure InputAvailable(UserData: TObject);
  13. procedure Timeout(UserData: TObject);
  14. public
  15. constructor Create(AManager: TAsyncIOManager);
  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.BreakRun;
  30. Ord('t'): FManager.ClearTimeoutHandler;
  31. end;
  32. end;
  33. procedure TASIOTest.Timeout(UserData: TObject);
  34. begin
  35. WriteLn('Timeout');
  36. end;
  37. constructor TASIOTest.Create(AManager: TAsyncIOManager);
  38. begin
  39. inherited Create;
  40. FManager := AManager;
  41. Input := THandleStream.Create(StdInputHandle);
  42. AManager.SetReadHandler(Input.Handle, @InputAvailable, nil);
  43. AManager.SetTimeoutHandler(@Timeout, nil);
  44. AManager.Timeout := 1000;
  45. end;
  46. destructor TASIOTest.Destroy;
  47. begin
  48. Input.Free;
  49. end;
  50. var
  51. AsyncIOManager: TAsyncIOManager;
  52. app: TASIOTest;
  53. begin
  54. WriteLn('Exit with "q", use "t" to stop the timeout handler');
  55. AsyncIOManager := TAsyncIOManager.Create;
  56. app := TASIOTest.Create(AsyncIOManager);
  57. AsyncIOManager.Run;
  58. app.Free;
  59. AsyncIOManager.Free;
  60. end.
  61. {
  62. $Log$
  63. Revision 1.2 2000-07-13 11:33:03 michael
  64. + removed logs
  65. }