Autor Beitrag
OZ
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 04.01.07 09:03 
Hallo Leute,
ich habe noch eine Frage zu Threads.Ich habe eine Type TJobQueue (eine Unit, kein Fomular), der eine Joblist verwaltet (ist eine threadsichere Stringllist), auf die verschiedene Threads aus TMyHttpThreads (auch nur eine Unit) zugreifen. Der Zugriff erfolgt über die Variable JobQueue aus den Threads aus. Das Programm friert dann jedoch im Threads ein (JobQueue.Joblist.Count). Weiß jemand, was das Problem ist?
Danke!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
unit JobQueueMultiThread;
uses
  Classes,HttpGetThreads,UThreadStringList;

  type
    [b]TJobQueue[/b] = class
  private
    Threadlist: TList;
    FJoblist : TThreadStringList;
  public
   constructor create;
   destructor destroy;override;
   property Joblist: TThreadStringList read FJoblist write FJoblist;
   procedure StartJob;
   procedure AddThread;
   procedure ThreadResult(Content: TStringStream; ThreadID: Integer);
end; //Type
var JobQueue: TJobQueue;
implementation



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
implementation
uses JobQueueMultiThread;//Main

procedure TMyHttpThreads.Execute;
var url:string;
begin
  { Thread-Code hier einfügen }
  IdHTTP:=TIdHTTP.Create;
  ContentStream:= TStringStream.Create(toEOF);
  while ((JobQueue.Joblist.Count>0)) do
  begin;
   url:=JobQueue.Joblist.Strings[0];
   JobQueue.Joblist.Delete(0);
   IdHTTP.Get(URL,ContentStream);
   Synchronize(loadComplete);
  end;
end;


Zuletzt bearbeitet von OZ am Do 04.01.07 12:15, insgesamt 2-mal bearbeitet
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 04.01.07 09:15 
Hallo,

bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:

1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]


Einfach oben bei Deinem ersten Beitrag auf user defined image klicken und den Titel ändern. Danke Dir!

Viele Grüße,
Peter
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 04.01.07 09:50 
Benutzt du TIdAntiFreeze? Das soll ein Einfrieren der Anwendung verhindern, ich weiß nicht, ob es das Problem in diesem Fall ist.
Das muss einfach aufs Formular drauf.
OZ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Do 04.01.07 13:26 
Danke jaenicke!
Leider ist es das nicht. Aber ich glaube, daß ich ein Denkfehler im Code habe. Wie greife ich auf von einer Unit auf eine andere Unit zu, wenn ich den Instantznamen der Klasse der ersten Unit nicht kenne?
Ich habe in der ersten Unit eine Variabe vom Typ der Klasse angelegt. Deren Name kenne ich und den referneziere ich. Sinnbvoll oder bessere Lösung? Manchmal sagt ein Code mehr als tausend Worte

@jasocul
Edit habe ich gemacht. Danke für den Hinweis.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
unit 1;
implementation  
  uses JobQueueMultiThread;//Main <--- Verweise auf die andere Unit
..
while ((JobQueue.Joblist.Count>0)) do  //<--- JobQueue is nil
...


ausblenden Delphi-Quelltext
1:
2:
3:
4:
unit JobQueueMultiThread;//<-- andere Unit
type....
var JobQueue: TJobQueue;// <-- ist nil oben!
implementation


Moderiert von user profile iconjasocul: Delphi-Tags hinzugefügt