Announcement

Collapse
No announcement yet.

Hilfe Problem mit Zugriffen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hilfe Problem mit Zugriffen

    Hallo zusammen, hab da ein kleines Problemchen...
    Also ich habe 10 Listboxen in denen Namen stehen, nun starte ich 10 Threads also für jede Listbox einen der diese durchgeht und mit dem Namen eine Select-abrage startet.
    Nun das Problem:
    Setze ich den ganzen Code des Thread in Synchronize dann fängt der 2 Thread erst an wenn der erste beendet ist, was natürlich nicht Sinn macht, dann brauch ich auch keine Threads.
    Setze ich aber nur Zugriffe auf eine Listview oder die Statusbar dann laufen alle "gleichzeitig" nur einige bekommen dadurch keine Daten bei der Abfrage.
    Wenn ich dies kontrolliere und dementsprechend diese Abfrage wiederhole bis eine Antwort kommt läuft sich das ganze tot.
    Wie kann man dies also besser machen ?????

    Danke im Vorraus...
    Gruss
    Stefan

  • #2
    Die VCL ist nicht Thread-Sicher. D.h. Du mußt deine Logik umbauen und darfst von den Threads nicht direkt auf die Listboxen zugreifen (z.B. beim Start des Thread die Komplette Namensliste in einer TStringList an die Threads übergeben).
    Auch ist Fraglich ob deine Datenbank-Zugriffskomponenten auch Thread-Save sind oder ob du für jeden Thread eine eigene DB-Verbindung (im Thread) aufbauen mußt

    Comment


    • #3
      Hallo Herr Geyer,
      ist das mit der VCL auch der Fall wenn nur ein Thread auf diese Listbox zugreift.
      Ich hab das jetzt foldendermassen:

      TAnmeldeThread = class(TThread)
      private
      i: Integer;
      p:Integer;
      url:String;
      name:string;
      methode:String;
      params:String;
      FControl1: TscProgressbar;
      FControl2: TListbox;
      FControl3: TlistView;
      FControl4: TZQuery;
      FControl5: TInternetHTTPRequest;
      FControl6: TStatusbar;
      FControl7: TmxFlatGroupbox;
      FControl8: TListbox;
      // FControl9: TInternetSession;
      procedure SyncUpdateListView;
      procedure SyncUpdateError;
      procedure SyncEnde;
      procedure SyncGroupbox;
      procedure DoTransfer;
      protected
      procedure Execute; override;
      public
      property Control1: TscProgressbar read FControl1 write FControl1;
      property Control2: TListbox read FControl2 write FControl2;
      property Control3: TlistView read FControl3 write FControl3;
      property Control4: TZQuery read FControl4 write FControl4;
      property Control5: TInternetHTTPRequest read FControl5 write FControl5;
      property Control6: TStatusbar read FControl6 write FControl6;
      property Control7: TmxFlatGroupbox read FControl7 write FControl7;
      property Control8: Tlistbox read FControl8 write FControl8;
      // property Control9: TInternetSession read FControl9 write FControl9;
      end;

      und übergebe nach dem Create des Threads die entsprechenden
      Komponenten

      Allerdings greifen die verschiedenen Querys immer auf eine Connection zu.

      Gruss

      Stefa

      Comment


      • #4
        Du darfst auf GUI-Controls nur vom primären Thread zugreifen. Wenn Du einen weiteren Thread erzeugst darfst du nur mittels Synchronisierter Methoden darauf zugreifen.

        Und ob die Zeos-Komponenten (TZQuery ist ja wohl eine Zeos-Komponente) Thread-Fest sind weiß ich auch nicht

        Comment


        • #5
          Ginge es denn wenn ich die Zeos-Komponenten dann in jedem Thread erzeuge oder klappt das dann auch nicht ??

          Comment


          • #6
            Nach meinen Verständnis müsste es gehen wenn die Zeos-Komponenten (auch die TZDatabase/Connection-Komponente) im Thread erzeugt wird. Aber das solltest Du selbst ausprobieren

            Comment


            • #7
              Hallo Herr Geyer,
              ja, das klappt wunderbar, wenn ich jede Komponente zur Laufzeit des Threads erstelle und nur das was auf dem HauptForm aktualisiert werden soll mit Synchronize bearbeite.

              Vielen Dank für Ihre Hilfe.

              Gruss

              Stefa

              Comment

              Working...
              X