Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uses
- SyncObjs, IdHTTP, IdSSLOpenSSL;
- type
- TTwitterThread = class(TThread)
- private
- FExitEvent: TEvent;
- FTwitterURL: string;
- FUpdateTime: Integer;
- FHTTPClient: TIdHTTP;
- FSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
- protected
- procedure Execute; override;
- procedure DoTerminate; override;
- public
- constructor Create(const TwitterURL: string; UpdateTime: Integer); reintroduce;
- destructor Destroy; override;
- end;
- implementation
- { TTwitterThread }
- constructor TTwitterThread.Create(const TwitterURL: string; UpdateTime: Integer);
- begin
- inherited Create(False);
- FExitEvent := TEvent.Create(nil, False, False, '');
- FTwitterURL := TwitterURL;
- FUpdateTime := UpdateTime;
- FHTTPClient := TIdHTTP.Create;
- FSSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create;
- FHTTPClient.IOHandler := FSSLHandler;
- FHTTPClient.HandleRedirects := True;
- end;
- destructor TTwitterThread.Destroy;
- begin
- FSSLHandler.Free;
- FHTTPClient.Free;
- FExitEvent.Free;
- inherited;
- end;
- procedure TTwitterThread.DoTerminate;
- begin
- // signal the exit event
- FExitEvent.SetEvent;
- // this will interrupt running HTTP operation
- if Assigned(FHTTPClient) then
- FHTTPClient.Disconnect;
- end;
- procedure TTwitterThread.Execute;
- var
- S: string;
- begin
- // loop which exits when someone calls Terminate
- while not Terminated do
- begin
- // here we're waiting for the exit event to be signalled for a period of update
- // time; if the event becomes signalled during that period, the thread is going
- // to terminate; if the update timeout elapses, let's do some stuff
- case FExitEvent.WaitFor(FUpdateTime) of
- wrTimeout:
- begin
- try
- S := FHTTPClient.Get(FTwitterURL);
- // do whatever with data here
- except
- // cleanup the input buffer for reusing
- FHTTPClient.Disconnect;
- FHTTPClient.IOHandler.InputBuffer.Clear;
- end;
- end;
- wrSignaled: Exit;
- // you should handle also other wr... states; see help for TWaitResult
- end;
- end;
- end;
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- type
- TForm1 = class(TForm)
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- private
- FTwitterThread: TTwitterThread;
- end;
- implementation
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- FTwitterThread := TTwitterThread.Create('http://example.com', 60000);
- end;
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- FTwitterThread.Terminate;
- FTwitterThread.Free;
- end;
Advertisement
Add Comment
Please, Sign In to add comment