AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Indy stottert

Ein Thema von goose33 · begonnen am 11. Sep 2005 · letzter Beitrag vom 12. Sep 2005
Antwort Antwort
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#1

Indy stottert

  Alt 11. Sep 2005, 17:27
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:
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 problem ist jetzt das jedesmal wenn die DLL daten überdiese Function an
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Indy stottert

  Alt 11. Sep 2005, 17:47
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#3

Re: Indy stottert

  Alt 11. Sep 2005, 17:53
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
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#4

Re: Indy stottert

  Alt 11. Sep 2005, 18:29
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.
  Mit Zitat antworten Zitat
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#5

Re: Indy stottert

  Alt 11. Sep 2005, 18:34
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
  Mit Zitat antworten Zitat
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#6

Re: Indy stottert

  Alt 12. Sep 2005, 13:52
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:
procedure Tf_main.RegisterDLL;
begin
  hMainThreadHandle:=BeginThread(nil, 0, TFNThreadStartRoutine(@TMainThread),
    nil, 0, dwMainThreadID);
  if hMainThreadHandle<>0 then CloseHandle(hMainThreadHandle);
end;
Der Thread selber :
Delphi-Quellcode:
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;
FsEnde ist eine Variable die ich im MainProgramm auf True setze sobal
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz