TLama

Untitled

Apr 19th, 2014
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.65 KB | None | 0 0
  1. uses
  2.   SyncObjs, IdHTTP, IdSSLOpenSSL;
  3.  
  4. type
  5.   TTwitterThread = class(TThread)
  6.   private
  7.     FExitEvent: TEvent;
  8.     FTwitterURL: string;
  9.     FUpdateTime: Integer;
  10.     FHTTPClient: TIdHTTP;
  11.     FSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
  12.   protected
  13.     procedure Execute; override;
  14.     procedure DoTerminate; override;
  15.   public
  16.     constructor Create(const TwitterURL: string; UpdateTime: Integer); reintroduce;
  17.     destructor Destroy; override;
  18.   end;
  19.  
  20. implementation
  21.  
  22. { TTwitterThread }
  23.  
  24. constructor TTwitterThread.Create(const TwitterURL: string; UpdateTime: Integer);
  25. begin
  26.   inherited Create(False);
  27.  
  28.   FExitEvent := TEvent.Create(nil, False, False, '');
  29.   FTwitterURL := TwitterURL;
  30.   FUpdateTime := UpdateTime;
  31.  
  32.   FHTTPClient := TIdHTTP.Create;
  33.   FSSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create;
  34.   FHTTPClient.IOHandler := FSSLHandler;
  35.   FHTTPClient.HandleRedirects := True;
  36. end;
  37.  
  38. destructor TTwitterThread.Destroy;
  39. begin
  40.   FSSLHandler.Free;
  41.   FHTTPClient.Free;
  42.   FExitEvent.Free;
  43.   inherited;
  44. end;
  45.  
  46. procedure TTwitterThread.DoTerminate;
  47. begin
  48.   // signal the exit event
  49.   FExitEvent.SetEvent;
  50.   // this will interrupt running HTTP operation
  51.   if Assigned(FHTTPClient) then
  52.     FHTTPClient.Disconnect;
  53. end;
  54.  
  55. procedure TTwitterThread.Execute;
  56. var
  57.   S: string;
  58. begin
  59.   // loop which exits when someone calls Terminate
  60.   while not Terminated do
  61.   begin
  62.     // here we're waiting for the exit event to be signalled for a period of update
  63.     // time; if the event becomes signalled during that period, the thread is going
  64.     // to terminate; if the update timeout elapses, let's do some stuff
  65.     case FExitEvent.WaitFor(FUpdateTime) of
  66.       wrTimeout:
  67.       begin
  68.         try
  69.           S := FHTTPClient.Get(FTwitterURL);
  70.           // do whatever with data here
  71.         except
  72.           // cleanup the input buffer for reusing
  73.           FHTTPClient.Disconnect;
  74.           FHTTPClient.IOHandler.InputBuffer.Clear;
  75.         end;
  76.       end;
  77.       wrSignaled: Exit;
  78.       // you should handle also other wr... states; see help for TWaitResult
  79.     end;
  80.   end;
  81. end;
  82.  
  83. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  84.  
  85. type
  86.   TForm1 = class(TForm)
  87.     procedure FormCreate(Sender: TObject);
  88.     procedure FormDestroy(Sender: TObject);
  89.   private
  90.     FTwitterThread: TTwitterThread;
  91.   end;
  92.  
  93. implementation
  94.  
  95. procedure TForm1.FormCreate(Sender: TObject);
  96. begin
  97.   FTwitterThread := TTwitterThread.Create('http://example.com', 60000);
  98. end;
  99.  
  100. procedure TForm1.FormDestroy(Sender: TObject);
  101. begin
  102.   FTwitterThread.Terminate;
  103.   FTwitterThread.Free;
  104. end;
Advertisement
Add Comment
Please, Sign In to add comment