AGB  ·  Datenschutz  ·  Impressum  







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

Thread und VCL Zugriff

Ein Thema von Mavarik · begonnen am 3. Jan 2007 · letzter Beitrag vom 3. Jan 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#1

Thread und VCL Zugriff

  Alt 3. Jan 2007, 13:19
Hallo Zusammen!

Thread kann man sicherlich für die unterschiedlichsten Anwendungsbeispiele einsetzen.

Ich weiß nicht wie es Euch geht, aber in einer Anwendung entscheide ich mich immer dann einen Thread zu benutzen, wenn das Hauptprogramm keine "Zeit" hat oder nicht auf das Ergebniss warten soll.

In 99% aller Fälle, will ich aber im Thread etwas ausgeben, einen Status, einen Log oder einen Progress-Balken.

Da ein Zugriff auf die VCL jedoch "nur" über Syncronize(XY) erlaubt ist und dieser Code dann im Haupt-VCL-Thread ausgeführt wird, bringt mir der ganze Thread eigentlich nix, da ja mein Hauptprogramm gerade wie gesagt keine "Zeit" hat bzw. eben kein Application.Processmessages aufrufen kann oder soll...

Wie macht Ihr das? Gibt es dafür eine Lösung?

Grüsse Frank
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Thread und VCL Zugriff

  Alt 3. Jan 2007, 13:33
Eine Lösung ist ein threadsafe gecodeter Puffer, in dem die zu visualisierenden Daten liegen.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Thread und VCL Zugriff

  Alt 3. Jan 2007, 13:34
Zitat von chaosben:
Eine Lösung ist ein threadsafe gecodeter Puffer, in dem die zu visualisierenden Daten liegen.
Ich dachte genau das ist das Problem, da die VCL eben nicht threadsave ist... Hast Du ein Beispiel?

Frank
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Thread und VCL Zugriff

  Alt 3. Jan 2007, 13:34
Das klingt nach Schwachsinn. Man macht einen Thread damit der Hauptthread weiterhin nur mit dem Betreiben der Oberflaeche via VCL beschaeftigt sein kann.
Die in "keine Zeit haben" verklausulierte Aufgabe gehoert in einen weiteren Thread.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Thread und VCL Zugriff

  Alt 3. Jan 2007, 13:42
Das Stichwort für meinen Vorschlag lautet "TMultiReadExclusiveWriteSynchronizer".

Davon erzeugt man ein Objekt und nutzt es, um den Zugriff auf den Puffer (irgendeine Variable) zu regeln.
Zitat von Die Delphihilfe ©Borland:
Mit TMultiReadExclusiveWriteSynchronizer kann der Zugriff auf den Speicher in einer Multithread-Anwendung überwacht werden. Im Gegensatz zu einem kritischen Abschnitt, der alle anderen Threads am Lesen und Schreiben in den zugeordneten Speicher hindert, ermöglicht es TMultiReadExclusiveWriteSynchronizer, dass mehrere Threads gleichzeitig aus dem geschützten Speicher lesen können. Bei einem Schreibzugriff eines Thread stellt TMultiReadExclusiveWriteSynchronizer sicher, dass der Thread exklusiven Zugriff auf den Speicher hat.

TMultiReadExclusiveWriteSynchronizer kann die Ausführungsgeschwindigkeit von Anwendungen wesentlich verbessern, in denen Threads häufig Lesezugriffe auf ein Objekt oder eine Variable ausführen, aber nur gelegentlich in das Objekt bzw. die Variable schreiben.

Jeder Zugriff auf den geschützten Speicher muss in Aufrufe der Methoden BeginRead und EndRead bzw. BeginWrite und EndWrite eingeschlossen werden. Andernfalls kann es zu Konflikten zwischen den einzelnen Threads kommen.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Thread und VCL Zugriff

  Alt 3. Jan 2007, 13:43
Zitat von Robert Marquardt:
Die in "keine Zeit haben" verklausulierte Aufgabe gehoert in einen weiteren Thread.
Ok wenn es dabei um eine Neuentwicklung geht, gebe ich Dir recht, aber wenn es darum geht eine bestehende "alte" Software ca. 1.2 Mio Source-Zeilen etwas zu parallelisieren, geht es nicht so einfach...

Frank
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Thread und VCL Zugriff

  Alt 3. Jan 2007, 13:47
wenn dein Hauptthread nie zeit hat einen Status anzuzeigen dann kannst du das ganz sein lassen. Ansonsten wäre noch die Möglichkeit das du nur alle 10 Sekunden den Status durch Syncronize mit dem Hauptthread abgleichst. Oder du postest eine Message an ein Fenster des Hauptthreads. Dann ist der Status jedoch assyncron zum Thread und macht keinen großen Sinn.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Thread und VCL Zugriff

  Alt 3. Jan 2007, 13:53
Zitat von SirThornberry:
Ansonsten wäre noch die Möglichkeit das du nur alle 10 Sekunden den Status durch Syncronize mit dem Hauptthread abgleichst.
Ja darum geht es ja gerade nicht...

Eine 2. Exec mit eigenem VCL-Thread kann ja auch parallel arbeiten... Die Frage ist, wie kann ich einen 2. VCL-Thread abspalten ohne eine 2. Exe zu erzeugen?

Frank
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#9

Re: Thread und VCL Zugriff

  Alt 3. Jan 2007, 14:02
Hallo!

Zitat von Mavarik:
Zitat von SirThornberry:
Ansonsten wäre noch die Möglichkeit das du nur alle 10 Sekunden den Status durch Syncronize mit dem Hauptthread abgleichst.
Ja darum geht es ja gerade nicht...

Eine 2. Exec mit eigenem VCL-Thread kann ja auch parallel arbeiten... Die Frage ist, wie kann ich einen 2. VCL-Thread abspalten ohne eine 2. Exe zu erzeugen?

Frank
Eine 2. Exec? Du meinst dasselbe Programm noch einmal aufgerufen? Das ist doch ein anderer Prozess! Das die sich nicht in die Quere kommen ist doch klar.

Ich sorge immer dafür, daß der Hauptthread "Freizeit" hat, während ein anderer Thread ackert und zwischendurch seine Fortschritte per Synchronize durchgibt (wohlgemerkt, die Arbeit fällt natürlich nicht im Synchronize an!).

Cu,
Udontknow
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: Thread und VCL Zugriff

  Alt 3. Jan 2007, 14:11
Zitat von Udontknow:
Eine 2. Exe? Du meinst dasselbe Programm noch einmal aufgerufen? Das ist doch ein anderer Prozess! Das die sich nicht in die Quere kommen ist doch klar.
Nein natürlich nicht..

OK dann eben so... Wie erzeuge ich aus meinem Programm einen Thread/Prozess mit einer eigenen VCL-Thread?

Frank
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 17:37 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