![]() |
Indy stottert
Hallo,
folgendes Problem : Ich bin dabei ne DLL für ein Programm zu schreiben ( FS2004 ) In der DLL übermittle ich die aktuelle Position des Flugzeuges an ein php Script mit folgender Function :
Delphi-Quellcode:
Das problem ist jetzt das jedesmal wenn die DLL daten überdiese Function an
function TF_main.SendPostData(Ahttp: TIdHTTP; const AtoURL: String; const aParams: TStrings): String;
Var lStream: TMemoryStream; //HTML-Result des PHP-Scripts lParams: TStringStream; I: Integer; begin Result:=''; if not Assigned(aHttp) then exit; lStream := TMemoryStream.create; lParams := TStringStream.create(''); try AHTTP.Request.ContentType := 'application/x-www-form-urlencoded'; for I:=0 to aParams.Count-1 do lParams.WriteString(aParams[I] + '&'); try AHTTP.Post(AtoURL, lParams, lStream); except on E: Exception do begin AHTTP.Disconnect; Result := ''; exit; end; end; SetLength(Result,lStream.Size); lStream.Position:=0; lStream.ReadBuffer(Result[1],lStream.Size); finally lParams.Free; lStream.Free; end; end; das Script sendet, dann Stockt der FlugSimulator und das ist nicht wirklich schön. Hat jemand eine Ahnung wie man das anders machen könnte oder das Problem beheben könnte ? ( Hab die neusten Indy ) Dank Euch ! Matthias |
Re: Indy stottert
in dem das ganze in einem extra thread gesendet wird. Somit kann das Flugzeug in ruhe weiterfliegen und muss nicht warten bis irgendwelche Daten gesendet sind.
|
Re: Indy stottert
Hallöchen,
hmmmm, danke Dir für die Antwort,aber ich mach ncoh nicht so lange mit Delphi .... also wie mach ich das denn ? Dank Dir Matthias |
Re: Indy stottert
Du erstellt einen TThread-Object und packtst die notige Code da rein. Dann irgendwo im Hauptprogramm, an der Stelle wo du die Daden an den Script sendest, startest du den Thread, der das dann erledigt, ohne die Ablauf der Hauptanwendung zu beeinträchtigen. Aber ich denke mal, du muss dich erst mal mit den allgemeinen Infos zum Thema "Threads" beschäftigen. Dazu gibt es einen gutet Tutorial von Luckie, suche einfach mal hier im Forum.
|
Re: Indy stottert
Hallöchen,
genau dabei bin ich gerad....les mich in das Tutorial rein. Dank Euch für die Antworten ! Ich denk mal ich hab das Problem erst mal verstanden Jetzt gehts nur noch um die umsetzung :-) Danke Matthias |
Re: Indy stottert
Hallo nochmal,
irgendwie bekomm ich das mit dem Thread nicht gebacken. Also folgendes soll : Die DLL wird vom MainProgramm initialisiert. Wenn man die DLL braucht wird sie das erste mal gestartet und bekommt vom Mainprogramm gesagt das sie das erste mal aufgerufen wird. Ist dies der Fall, dann wird eine Procedure ( die darf sowieso nur einmal aufgerufen werden ) aufgerufen. Genau in dieser Procedure ( RegisterDLL ) möchte ich das der Thread gestartet wird. Der thread muss dann solange das MainProgramm läuft ausgeführt werden ! Im Thread selber müssen immer wieder verschieden andere Proceduren aufgerufen werden ( Internet Checken, Daten an Webseite senden [per Indy eben] usw ) Wenn das MainProgramm beendet wird soll auch der Thread beendet werden. Ich hab das Tutorial gelesen und bin auch so halbwegs durchgestiegen, aber irgendwie bekomm ich es nicht gebacken. Immer wenn ich das MainProgramm beende kommt entweder ne Fehlermeldung oder das hauptprogramm hängt noch im taskanager. Thread starten :
Delphi-Quellcode:
Der Thread selber :
procedure Tf_main.RegisterDLL;
begin hMainThreadHandle:=BeginThread(nil, 0, TFNThreadStartRoutine(@TMainThread), nil, 0, dwMainThreadID); if hMainThreadHandle<>0 then CloseHandle(hMainThreadHandle); end;
Delphi-Quellcode:
FsEnde ist eine Variable die ich im MainProgramm auf True setze sobal
function Tf_main.MainThread: Boolean;
begin Result := True; mDebug.Lines.Add('Checking Inet'); bInet := f_main.CheckInet; // internet Connection prüfen mDebug.Lines.Add('Check Inet fertig'); if FsEnde = True then Result := false; end; // MainThread function TMainThread(zahl: Pointer): LongInt; begin Result:=0; repeat f_main.MainThread; until f_main.MainThread = false; ShowMessage('Thread Ende'); end; WM_CLOSE gesendet wird. War so ein Versuch unter vielen....sehr vielen :-) Kann mir vielleicht einer sagen was hier schief geht ? "" ShowMessage('Thread Ende') "" wird nicht aufgerufen "" Das MainProgramm bleibt im TaskManager "" Dank Euch Matthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 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