Hi Leute,
mit Threads kenn ich mich einigermaßen aus. Habe hier gerade aber ne Situation, wo ich nicht ganz sicher bin wie's richtig ist.
Problem :
Ich möchte über die IdHttp-Komponente eine Anfrage auf ein PHP-SChript auf meinem Server schicken, in diesem Fall geht es z.B. um eine Anmeldung.
Ich brauche aber auch die Antwort der Http-Anfrage; nach dem Motto :
1 = Anmeldung ok
0 = ???
-1 user oder pwd unbekannt
Damit nicht das ganze Programm solange steht wir die Anfrage ausgeführt wird dachte ich mir, das verlagere das ganze in einen Thread.
D.H. Ich verlagere meine Anfrage in einen Thread warte aber im Hauptprogramm nach der erzeugung solange bis der Thread fertig ist und mir das Ergebnis geliefert hat.
Frage 1:
Ist der GRundgedanke falsch ?
Frage 2:
Code:
Var
intTwThd : TInteractiveTWThread;
iRes : Longint;
begin
intTwThd := TInteractiveTWThread.Create({meine login-Parameter});
try
// Thread starten
intTwThd.Resume;
// auf Ende des Threads warten
intTwThd.WaitFor;
iRes := intTwThd.Result;
result := (iRes = 1) or (iRes = 2);
finally
intTwThd.Terminate;
end;
end;
ist das richtig so ? Weil eigentlich wartet "waitfor" ja solange bis der Thread fertig ist. Der Thread ist auf FreeOnTerminate gestellt und ich greife danach auf die Property Result des Threads zu, obwohl er da ja schon freigegeben sein sollte.
Mit diesem gebastelten Konstrukt geht es, aber ab und zu bekomm ich schutzverletzungen in meiner App es laufen so ca. 6 Thread noch paralellel im Hintergrund. Welcher Thread jetzt wann welchen Fehler bringt kann ich nicht genau sagen, denn das Debugging von dem ganzen ist nicht so einfach, vor allen Dingen, weil mir beim Debuggen der Threads Deplhi mir 50% wahrscheinlichkeit abraucht.
Aber ich glaube Ihr wißt worum es mir geht !
Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.