Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy freeze Problem (https://www.delphipraxis.net/129353-indy-freeze-problem.html)

Novo 17. Feb 2009 18:46


Indy freeze Problem
 
Hi,
ich lese mit Indy.get(URL)
Internetseiten aus, und werte die Informationen aus.
Das soll es alle 10 Sekunden über einen Timer machen.

Das Problem ist, dass dann alle 10 Sekunden die Form für 3 Sekunden freezed!
idAntiFreeze bringt auch nichts!
Jetzt habe ich das so gemacht, als Thread, es freezed immernoch!
:wiejetzt:

GetRadioInfo wird im TimerGetRadioInfoTimer alle 10 Sekunden aufgerufen,
und GetRadioInfo ruft mehrmals function ThreadedHTTP auf, und da hängts!

Delphi-Quellcode:
unit MainU;

//... blabla

function readout(text, vorne, hinten: string): string;
var astring: string;
begin
  astring := copy(text, Pos(vorne, text) + length(Vorne), PosEx(hinten, text, Pos(vorne, text)) - Pos(vorne, text) - length(vorne));
  result := astring;
end;

function StringsucheVor(Quelle,anfang,ende:string):string;
var i,k,erstestelle: longint  ;
    ergebnis : String;
begin
   i := 0  ;
   k := length(anfang);
   ergebnis := '';
   ersteStelle := pos(anfang,Quelle);
   if ersteStelle <> 0 then
   begin
      while copy(Quelle,erstestelle+k+i,1) <> ende do
      begin
         ergebnis := ergebnis + copy(Quelle,erstestelle+k+i,1);
         inc(i);
      end;
   end;
  result := ergebnis;
end;

function ThreadedHTTP(URL:string):string;
var
  cHttp : TidHTTP;
  QuellCode : string;
begin
  cHttp := TidHTTP.Create (Nil);
  Try
QuellCode := cHttp.Get(URL);
  Finally
    cHttp.Free;
    result := QuellCode;
  End
End;  

procedure GetRadioInfo;
var
  //Quellcode der Homepage
  QuellCodeTechnobase : string;
  QuellCodeTrancebase : string;
  QuellCodeHardbase  : string;
  QuellCodeHousetime : string;

  //Technobase
  TechnobaseModerator : string;
  TechnobaseShow     : string;
  TechnobaseStyle    : string;
  TechnobaseListener : string;
  TechnobaseTrack    : string;

  //Trancebase
  TrancebaseModerator : string;
  TrancebaseShow     : string;
  TrancebaseStyle    : string;
  TrancebaseListener : string;
  TrancebaseTrack    : string;

  //Hardbase
  HardbaseModerator : string;
  HardbaseShow     : string;
  HardbaseStyle    : string;
  HardbaseListener : string;
  HardbaseTrack    : string;

  //Housetime
  HousetimeModerator : string;
  HousetimeShow     : string;
  HousetimeStyle    : string;
  HousetimeListener : string;
  HousetimeTrack    : string;

begin
QuellCodeTechnobase := ThreadedHTTP('http://www.technobase.fm');
QuellCodeTrancebase := ThreadedHTTP('http://www.trancebase.fm');
QuellCodeHardbase := ThreadedHTTP('http://www.hardbase.fm');
QuellCodeHousetime := ThreadedHTTP('http://www.housetime.fm');

TechnobaseListener := StringSucheVor(QuellCodeTechnobase, 'TechnoBase</a>:</td><td>', '<');
frmMain.lblTechnobaseListener.caption := TechnobaseListener;

TechnobaseModerator := StringSucheVor(QuellCodeTechnobase, 'target="_top"><span style="color:#FFDD82">', '<');
frmMain.lblTechnobaseModerator.Caption := TechnobaseModerator;

TechnobaseShow := StringSucheVor(QuellCodeTechnobase, '/span></a><span style="color:#DFB649"> mit "', '"');
frmMain.lblTechnobaseShow.Caption := TechnobaseShow;

TechnobaseStyle := StringSucheVor(QuellCodeTechnobase, '"</span><span style="color:#DFB649"> (', ')');
frmMain.lblTechnobaseStyle.Caption := TechnobaseStyle;

TechnobaseTrack := StringSucheVor(QuellCodeTechnobase, '<div style="width:345px;float:left; margin-top:11px; overflow:hidden">', '<');
frmMain.lblTechnobaseTrack.Caption := Trim(TechnobaseTrack);

//---

HardbaseListener := StringSucheVor(QuellCodeHardbase, 'HardBase</a>:</td><td>', '<');
frmMain.lblHardbaseListener.caption := HardbaseListener;

HardbaseModerator := StringSucheVor(QuellCodeHardbase, 'target="_top">', '<');
frmMain.lblHardbaseModerator.caption := HardbaseModerator;

HardbaseShow := StringSucheVor(QuellCodeHardbase, '</a> mit "', '"');
frmMain.lblHardbaseShow.caption := HardbaseShow;

HardbaseStyle := StringSucheVor(QuellCodeHardbase, '" (', ')');
frmMain.lblHardbaseStyle.caption := HardbaseStyle;

HardbaseTrack := StringSucheVor(QuellCodeHardbase, '<div style="width:345px;float:left; margin-top:11px; overflow:hidden">', '<');
frmMain.lblHardbaseTrack.Caption := Trim(HardbaseTrack);

//---

HousetimeListener := StringSucheVor(QuellCodeHousetime, 'HouseTime</a>:</td><td>', '<');
frmMain.lblHousetimeListener.caption := HousetimeListener;

HousetimeModerator := StringSucheVor(QuellCodeHousetime, 'target="_top">', '<');
frmMain.lblHousetimeModerator.Caption := HousetimeModerator;

HousetimeShow := StringSucheVor(QuellCodeHousetime, '</a> mit "', '"');
frmMain.lblHousetimeShow.Caption := HousetimeShow;

HousetimeStyle := StringSucheVor(QuellCodeHousetime, '" (', ')');
frmMain.lblHousetimeStyle.Caption := HousetimeStyle;

HousetimeTrack := StringSucheVor(QuellCodeHousetime, '<div style="width:345px;float:left; margin-top:11px; overflow:hidden">', '<');
frmMain.lblHousetimeTrack.Caption := Trim(HousetimeTrack);

//---

TrancebaseListener := StringSucheVor(QuellCodeTrancebase, 'TranceBase</a>:</td><td>', '<');
frmMain.lblTrancebaseListener.caption := TrancebaseListener;

TrancebaseModerator := StringSucheVor(QuellCodeTrancebase, 'target="_top">', '<');
frmMain.lblTrancebaseModerator.Caption := TrancebaseModerator;

TrancebaseShow := StringSucheVor(QuellCodeTrancebase, '</a> mit "', '"');
frmMain.lblTrancebaseShow.Caption := TrancebaseShow;

TrancebaseStyle := StringSucheVor(QuellCodeTrancebase, '" (', ')');
frmMain.lblTrancebaseStyle.Caption := TrancebaseStyle;

TrancebaseTrack := StringSucheVor(QuellCodeTrancebase, '<div style="width:345px;float:left; margin-top:11px; overflow:hidden">', '<');
frmMain.lblTrancebaseTrack.Caption := Trim(TrancebaseTrack);
end;


procedure TfrmMain.TimerGetRadioInfoTimer(Sender: TObject);
begin
GetRadioInfo;
end;

end.
achja... und :dp:

Meflin 17. Feb 2009 19:06

Re: Indy freeze Problem
 
Und wo genau denkst du jetzt, dass dein HTTP-Request threaded abläuft :gruebel:

Novo 17. Feb 2009 19:33

Re: Indy freeze Problem
 
Zitat:

Zitat von Meflin
Und wo genau denkst du jetzt, dass dein HTTP-Request threaded abläuft :gruebel:

äh xD?
oh^^
:duck:

so besser?

Delphi-Quellcode:
function ThreadedHTTPTechnobase():string;
var
  cHttp : TidHTTP;
  QuellCode : string;
begin
  cHttp := TidHTTP.Create (Nil);
  Try
QuellCode := cHttp.Get([url]http://www.technobase.fm[/url]);
  Finally
    cHttp.Free;
    result := QuellCode;
  End
End;
... usw.
also für alle 4 extra Threaded function?
ist immernoch net besser :coder:

Meflin 17. Feb 2009 19:34

Re: Indy freeze Problem
 
Nein. du erstellst immernoch nirgends einen Thread! Dazu müsstest du ein Exemplar von TThread erzeugen oder aber BeginThread verwenden ;)
http://www.hsg-kl.de/faecher/inf/mat...eads/index.php

Novo 17. Feb 2009 19:52

Re: Indy freeze Problem
 
Zitat:

Zitat von Meflin
Nein. du erstellst immernoch nirgends einen Thread! Dazu müsstest du ein Exemplar von TThread erzeugen oder aber BeginThread verwenden ;)
http://www.hsg-kl.de/faecher/inf/mat...eads/index.php

aah so geht das ...
Muss erstmal wieder Delphi und alle Komponenten neu installieren, ich erstelle nämlich gerade eine Windows Se7en Komponente, diese hat mir aber beim Installieren alle anderen Komponenten geschrottet xD.

Nacher teste ich es mal!


EDIT:
Hmm habs imemrnoch nicht so ganz Verstanden, wie das mit dem Thread funktioniert!
Anhand der Beep Demo auf der Seite da hab ichs verstanden, wenn ich das mit Indy mache, gehts immernoch nicht :S
Morgen 2. Versuch
GN8

Novo 19. Feb 2009 12:29

Re: Indy freeze Problem
 
Hm also irgendwie funktioniert mein Thread nicht.
Ich kann es zwar threaded machen, allersings kann ich dann dem Thread keine URL oder sowas übergeben, da das dann trotzdem freezed

Meflin 19. Feb 2009 12:31

Re: Indy freeze Problem
 
Nimm doch einfach Synapse:
http://www.ararat.cz/synapse/doku.php

die sind von Haus aus multithreaded...

Luckie 19. Feb 2009 12:46

Re: Indy freeze Problem
 
Zitat:

Zitat von Novo
Hm also irgendwie funktioniert mein Thread nicht.
Ich kann es zwar threaded machen, allersings kann ich dann dem Thread keine URL oder sowas übergeben, da das dann trotzdem freezed

Dann machst du irgendwas falsch. Zeig uns doch mal den Code von deinem Thread.

@Meflin: Ich glaube nicht, dass eine andere Komponentensammlung was an dem Problem ändert.

Meflin 19. Feb 2009 12:48

Re: Indy freeze Problem
 
Zitat:

Zitat von Luckie
@Meflin: Ich glaube nicht, dass eine andere Komponentensammlung was an dem Problem ändert.

Klar, ein Download via Synapse läuft ansynchron, sprich sien Programm wartet nicht auf das Ende sprich es friert nicht ein. es sei denn du mientest mit Problem das mangelnde Verständnis der Threads :stupid:

Novo 20. Feb 2009 11:08

Re: Indy freeze Problem
 
@Luckie
Kannst du mir einen Thread machen, das:
idHTTP.create
result := idhttp.get(URL)

also ein Thread als Funktion die ich mit de mParameter (der URL) aufrufen kann
oder ich mache halt 4 eigene Threads mit jeweils einer anderen URL


also ich muss:
Quellcode einer URL holen
per POS StringSucheVor die Infos aus dem Quellcode rausholen
Die Infos auf einem Label Anzeigen
und das mehrmals mit verschiedenen URLS und Suchparameter

wie soll ich das Theraded machen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 Uhr.
Seite 1 von 2  1 2      

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