![]() |
IdHTTP get in Thread ausführen?
Ich habe folgende Anwendung:
Bei einem Klick auf eine Google Maps Karte werden die Koordinaten in eine URL eingebaut und an eine Internetseite geschickt. Als response kommt ein json string. Hier meine Abfrage:
Code:
Packe ich das nun in ein OnButtonClick ereignis passiert folgendes:
procedure tform1.get_results;
begin idhttp1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'; idhttp1.Request.Accept := 'application/json, text/javascript, */*; q=0.01'; idhttp1.Request.CustomHeaders.Add('origin: https:jsontest.de'); idhttp1.Request.CustomHeaders.Add('authority: api.jsontest.de'); result_string := idhttp1.Get('https://api.jsontest.de/?lat=49.834227128096916&lng=8.588504446191408'); form1.create_results; // Hier wird der String dann aufgearbeitet und es wird ein marker auf die Karte gesetzt end; Ich klicke auf die Karte und es scheint nichts zu passieren für ca. 20 Sekunden, dann erscheint erst der Marker und der Kreis. Diese Wartezeit liegt wohl daran das die response manchmal etwas dauert. Das finde ich störend, es sollte erst der Marker und der Kreis erscheinen. Der Rest funktioniert einwandfrei! Also kam ich auf die idee die http get Abfrage in einen Thread einzubauen. Sieht genau so aus, nur eben am Anfang mit:
Code:
procedure TMyThread.Execute;
begin Der Marker un der Kreis tauchen nun sofort auf aber im weiteren verlauf gibt es Probleme mit der Zeile:
Code:
Es ist aber egal welche Marker.xxx Zeile da steht. Er hat immer ein Problem nach dieser Zeile:
Marker.Latitude := strtofloat(lat);
Code:
Gestartet wird der Thread in OnMapClick ereignis der Karte:
Marker := GMaps1.Markers.Add;
Code:
Definiert wurde der thread so:
MyThread := TMyThread.Create(true);
mythread.Resume;
Code:
Dieses Problem hat er aber nur wenn ich das mit einem Thread mache, sonst funktioniert es. Daher bin ich mir sicher das der Fehler wegen dem thread ausgelöst wird. Das finde ich komisch. Woran könnte das liegen? Und wie bekomme ich diese Wartezeit weg bis der Marker und der Kreis erscheinen?
type
TMyThread = class(TThread) procedure Execute; override; end; . |
AW: IdHTTP get in Thread ausführen?
Steht bei dir im Execute des Threads sowas wie:
Delphi-Quellcode:
procedure TMyThread.Execute;
begin form1.idhttp1.Request.UserAgent... end; Dann ist das grundsätzlich verkehrt. Du musst die Instanz von der Indy-HTTP-Komponente im Execute erzeugen. |
AW: IdHTTP get in Thread ausführen?
Schau mal, ob Dir das Video hilft:
![]() (Ist thematisch auf jeden Fall in der Nähe.) |
AW: IdHTTP get in Thread ausführen?
Danke euch beiden, hat weiter geholfen :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz