Delphi Code:
uses httpsend, synautil; type TThreadLogger = class(TThread) private FUrl: String; FData: String; protected procedure Execute; override; public constructor Create(const AUrl, AData: String); reintroduce; virtual; end; constructor TThreadLogger.Create(const AUrl, AData: String); begin inherited Create(false); FreeOnTerminate := true; FUrl := AUrl; FData := AData; end; procedure TThreadLogger.Execute; var HTTP: THTTPSend; PostRes: String; begin HTTP := THTTPSend.Create; try WriteStrToStream(HTTP.Document, ansistring(FData)); HTTP.MimeType := 'application/x-www-form-urlencoded'; PostRes := HTTP.HTTPMethod('POST', FUrl); // Hier kan je de post result verwerken en doe je de acties die je nodig vind.. If PostRes <> '' then begin // Hier verwerk je de data die je hebt teruggekregen van je post.. end; // Hier synchroniseren we met de mainform // Zo voorkom je data verlies en allerlei andere gekke dingen als je dit direct probeert te doen. Synchronize(procedure begin Form1.memo1.lines.add(PostRes); end); finally HTTP.Free; end; end; // ----------------------- // GEBRUIK // ----------------------- procedure Test; // var Thrd: TThreadLogger; begin { Thrd := } TThreadLogger.Create('https://somewebsi.te/page.php', 'somedata'); end;
Als je dus uitleest vanuit of schrijft naar de mainform (thread) wil je altijd synchronize gebruiken, of queue. Zo voorkom je dat je thread een stuk data probeert te verwerken in het geheugen terwijl de thread in je mainform hier ook op bezig is..
Quote:
Overigens draait het programma 100% vd tijd op de achtergrond.
ALs er geen threads gebruikt worden, heeft de gebruiker hier dan 'last' van?
Antwoord:
Als je echt een achtergrond programma maakt - heb je in principe zelfs geen forms nodig - en kan je zelfs een 2e losse programma maken voor eventuele instellingen, of je haalt deze mooi op met je post.
Je kan ook gewoon een VCL programma maken, en de forms uit de code halen - dan kan je gewoon je code in je applicatie source steken - en zou een extra thread "in mijn ogen" niet eens nodig zijn - omdat de mainthread anders toch niks anders doet..
Last edited by Reidinga; 13-Jun-19 at 21:38.
ja want je gebruikt (omdat je indy gebruikt) een blocked call. Oftewel als de server geen of langzaam antwoord geeft dan staat de main thread al die tijd stil tot er of een antwoord is van de server of een timeout. Daarom bij een post en vergeet, of zoals eerder hier aangegeven, post en als gelukt wis data, dan is een async call beter omdat die de main thread niet blokkeert
Als het programma op de achtergrond draait, dan is een aparte thread toch niet nodig?
Het programma stoort geen andere programma's in de OS
Delphi is great. Lazarus is more powerfull
mijn fout, dacht dat er een user interface bij zat. In dat niet het geval is dan is inderdaad dat hele thread gedoe onnodig, of sync vs async
PS Behalve dat na terug lezen er staat dat er per seconde data verzameld wordt. Dat stopt tijdens de post bij een sync call als het verzamelen in de main thread gebeurt
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks