Results 1 to 6 of 6

Thread: TTask repeat until loop

  1. #1

    TTask repeat until loop

    Is het veilig om een repeat until loop te doen in een TTask? En kan deze task dan ook gewoon gestopt worden? Ik wil namelijk elke 30 sec een http get doen bij mijn api; om te kijken of er nieuwe clients beschikbaar zijn - en in plaats van dit in de main thread te doen met een timer dacht ik aan een TTask, met daarin een while/repeat until - loop - en een pause om 30 seconden tussen de aanvragen te hebben.

    Kan ik dan "gewoon" cancel doen om de Task te stoppen, en is dit "veilig" - of moet ik in de loop controleren op een cancel?

    Delphi Code:
    1. FListTask := TTask.Create(procedure
    2.     var
    3.       lHTTP: TIdHTTP;
    4.       IdSSL: TIdSSLIOHandlerSocketOpenSSL;
    5.     begin
    6.       lHTTP := TIdHTTP.Create(nil);
    7.       try
    8.         lHTTP.ReadTimeout := 30000;
    9.         lHTTP.HandleRedirects := True;
    10.         IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
    11.         IdSSL.SSLOptions.Method := sslvTLSv1;
    12.         IdSSL.SSLOptions.Mode := sslmClient;
    13.         lHTTP.IOHandler := IdSSL;
    14.         lHTTP.CookieManager := IdCookieManager1;
    15.       Finally
    16.         try
    17.           repeat
    18.             lHTTP.Get('http://website.com/'+lPath, TStream(nil));
    19.           until true;
    20.         Finally
    21.           lHTTP.Free;
    22.         end;
    23.       end;
    24.     end);

    Tevens - ik wil gebruik maken van de cookie manager die op het mainform staat, is dat veilig vanuit de Task? of moet ik daar een eigen cookie manager aanmaken? Het is maar juist omdat in de mainthread wordt ingelogd, en er een cookie wordt opgeslagen voor de sessie. En die cookie heb ik ook nodig voor de verbinding om de lijst met clients op te vragen

  2. #2
    thread met TSimpleEvent waitfor op 30s?

    cookie naar the thread sturen als opstart (create) param en daar in the http stoppen?

  3. #3
    Volgens mij moet je dan in de loop controleren of je eruit moet. Kan je waarschijnlijk ook simpel testen. Maar zo'n task, sluit je programma, en kijk in task manager wat er gebeurt.
    1+1=b

  4. #4
    Ik gebruik het nu zo.

    Delphi Code:
    1. ...while (not Application.Terminated) and (not Error) do...

    Waarbij ik op de application terminated al controleer of de boel gaat afsluiten, al lijkt me dit nog overbodig gezien als ik een cancel doe dit prima werkt, en redelijk direct - de error is een simpele bool, die ik gebruik als idHTTP een fout geeft, en deze zorgt ervoor dat de loop stopt - en netjes de fout in log gezet wordt;

  5. #5
    Wat bedoel je met "een cancel doen"?
    1+1=b

  6. #6
    Op iTask heb je een cancel procedure; Als je die aanspreekt stopt de task. Nu heb ik in plaats van 1 lange sleep van 30 seconden, gewoon een loop van kleine sleeps van 2 seconden - die zich herhalen tot de 30 seconden vol is - en als er een task gecanceled is wordt deze dus bijna direct gesloten

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
  •