![]() |
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:
achja... und :dp:
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. |
Re: Indy freeze Problem
Und wo genau denkst du jetzt, dass dein HTTP-Request threaded abläuft :gruebel:
|
Re: Indy freeze Problem
Zitat:
oh^^ :duck: so besser?
Delphi-Quellcode:
... usw.
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; also für alle 4 extra Threaded function? ist immernoch net besser :coder: |
Re: Indy freeze Problem
Nein. du erstellst immernoch nirgends einen Thread! Dazu müsstest du ein Exemplar von TThread erzeugen oder aber BeginThread verwenden ;)
![]() |
Re: Indy freeze Problem
Zitat:
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 |
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 |
Re: Indy freeze Problem
Nimm doch einfach Synapse:
![]() die sind von Haus aus multithreaded... |
Re: Indy freeze Problem
Zitat:
@Meflin: Ich glaube nicht, dass eine andere Komponentensammlung was an dem Problem ändert. |
Re: Indy freeze Problem
Zitat:
|
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? |
Re: Indy freeze Problem
hmm was ist da falsch?
Delphi-Quellcode:
und dann:
function ThreadedHTTP(URL:string):string;
var Thttp : TidHTTP; QuellCode : string; begin Thttp := TidHTTP.Create (nil); try QuellCode := Thttp.Get(URL); finally Thttp.Free; result := QuellCode; End End;
Delphi-Quellcode:
QuellCodeTechnobase := ThreadedHTTP('http://www.technobase.fm');
application.ProcessMessages; QuellCodeTrancebase := ThreadedHTTP('http://www.trancebase.fm'); application.ProcessMessages; QuellCodeHardbase := ThreadedHTTP('http://www.hardbase.fm'); application.ProcessMessages; QuellCodeHousetime := ThreadedHTTP('http://www.housetime.fm'); |
Re: Indy freeze Problem
Nix is falsch. Nur falls du denkst, dass das jetzt "threaded" ist, dann liegst du falsch :roll:
|
Re: Indy freeze Problem
Zitat:
|
Re: Indy freeze Problem
Zitat:
![]() |
Re: Indy freeze Problem
Also ich weiß nicht wo das Problem ist. Du erstellst eine Thread-Klasse von TThread abgeleitet. Dieser fügst du ein neues Property URL hinzu. In der Execute-Methode erstellst du die Indy-Komponente und gibst sie am Ende wieder frei:
Delphi-Quellcode:
Und der Aufruf:
unit Unit3;
interface uses Classes; type TDownloadThread = class(TThread) private { Private-Deklarationen } FURL: string; FCode: string; procedure ShowCode; public property URL: string read FURL write FURL; protected procedure Execute; override; end; implementation uses IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, Unit2; { TDownloadThread } procedure TDownloadThread.Execute; var IdHTTP: TIdHTTP; begin IdHTTP := TIdHTTP.Create(nil); try FCode := IdHTTP.Get(URL); finally IdHTTP.Free; end; Synchronize(ShowCode); end; procedure TDownloadThread.ShowCode; begin Form2.Memo1.Text := FCode; end; end.
Delphi-Quellcode:
Das sollte als Grundgerüst reichen. Das ganze kann man jetzt noch um eine Fortschrittsanzeige und die Möglichkeit das ganze abzubrechen erweitern.abzubrechen
uses
Unit3; procedure TForm2.Button1Click(Sender: TObject); var DownloadThread: TDownloadThread; begin DownloadThread := TDownloadThread.Create(True); DownloadThread.FreeOnTerminate := True; DownloadThread.URL := 'http://www.michael-puff.de'; DownloadThread.Resume; end; |
Re: Indy freeze Problem
Zitat:
|
Re: Indy freeze Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Hast du ein Glück, dass ich nicht schlafen kann. Im Anhang eine lauffähige Demo inklusive Ereignissen. Bei mir friert da nichts ein. Einfriren tut es nur, wenn du andauernt Synchronize aufrufst, denn der Code wird dann im Kontext des Hauptthreads ausgeführt und gerade das wollen wir ja nicht. aLSO Synchronize nicht zu häufig aufrufen.
|
Re: Indy freeze Problem
Zitat:
|
Re: Indy freeze Problem
Zitat:
Zitat:
SO muss des aussehen, ja ne jetzt tuts auch danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 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