Page 2 of 2 FirstFirst 1 2
Results 16 to 20 of 20

Thread: http POST performance

  1. #16
    Quote Originally Posted by Reidinga View Post
    Alle communicatie vanuit een thread naar de main moeten via Synchronize:
    http://docwiki.embarcadero.com/Libra...ad.Synchronize

    Delphi Code:
    1. Synchronize(
    2.   procedure
    3.   begin
    4.     Form1.Memo1.Lines.Add('Added from thread');
    5.   end);

    Je kan de output van je post ook gewoon naar een variable schrijven in je thread, en als je er mee klaar bent deze via synchronize naar je memo schrijven.
    Thanks! Echter krijg ik deze nog niet helemaal goed. Heb je hier een vb van in de cotext van de code van rvk?

    Overigens draait het programma 100% vd tijd op de achtergrond.
    ALs er geen threads gebruikt worden, heeft de gebruiker hier dan 'last' van?

  2. #17
    Delphi Code:
    1. uses httpsend, synautil;
    2.  
    3. type
    4.   TThreadLogger = class(TThread)
    5.   private
    6.     FUrl: String;
    7.     FData: String;
    8.   protected
    9.     procedure Execute; override;
    10.   public
    11.     constructor Create(const AUrl, AData: String); reintroduce; virtual;
    12.   end;
    13.  
    14. constructor TThreadLogger.Create(const AUrl, AData: String);
    15. begin
    16.   inherited Create(false);
    17.   FreeOnTerminate := true;
    18.   FUrl := AUrl;
    19.   FData := AData;
    20. end;
    21.  
    22. procedure TThreadLogger.Execute;
    23. var
    24.   HTTP: THTTPSend;
    25.   PostRes: String;
    26. begin
    27.   HTTP := THTTPSend.Create;
    28.   try
    29.     WriteStrToStream(HTTP.Document, ansistring(FData));
    30.     HTTP.MimeType := 'application/x-www-form-urlencoded';
    31.     PostRes := HTTP.HTTPMethod('POST', FUrl);
    32.     // Hier kan je de post result verwerken en doe je de acties die je nodig vind..
    33.     If PostRes <> '' then
    34.     begin
    35.         // Hier verwerk je de data die je hebt teruggekregen van je post..
    36.     end;
    37.     // Hier synchroniseren we met de mainform
    38.     // Zo voorkom je data verlies en allerlei andere gekke dingen als je dit direct probeert te doen.
    39.     Synchronize(procedure
    40.       begin
    41.          Form1.memo1.lines.add(PostRes);
    42.       end);
    43.   finally
    44.       HTTP.Free;
    45.   end;
    46. end;
    47.  
    48. // -----------------------
    49. // GEBRUIK
    50. // -----------------------
    51.  
    52. procedure Test;
    53. // var Thrd: TThreadLogger;
    54. begin
    55.   { Thrd := } TThreadLogger.Create('https://somewebsi.te/page.php', 'somedata');
    56. 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 20:38.

  3. #18
    Quote Originally Posted by Mrorange View Post
    ALs er geen threads gebruikt worden, heeft de gebruiker hier dan 'last' van?
    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

  4. #19
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,520
    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

  5. #20
    Quote Originally Posted by jkuiper View Post
    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
    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

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •