Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frage zum Zugriff eines threads auf die Form (https://www.delphipraxis.net/106541-frage-zum-zugriff-eines-threads-auf-die-form.html)

ghost007 12. Jan 2008 15:02


Frage zum Zugriff eines threads auf die Form
 
Hallo,

ich will durch einen thread sachen an listview meiner form ändern. Nun bekomm ich haufenweise errors, wenn ich z.b. den listview slecte. Muss ich die änderungen alle mit Synchronise(); machen ? oder woran kann das liegen?

MfG - Ghost007

xaromz 12. Jan 2008 15:10

Re: Kurze frage zu Thread
 
Hallo,
Zitat:

Zitat von ghost007
Muss ich die änderungen alle mit Synchronise(); machen ? oder woran kann das liegen?

ja, dafür musst Du Synchronize nehmen. Sämtliche Änderungen an der Oberfläche müssen im Kontext des Hauptthreads stattfinden.

Gruß
xaromz

ghost007 12. Jan 2008 15:34

Re: Kurze frage zu Thread
 
Zitat:

Zitat von xaromz
ja, dafür musst Du Synchronize nehmen. Sämtliche Änderungen an der Oberfläche müssen im Kontext des Hauptthreads stattfinden.

Hm,
und wie mach ich das am schlausten, wenn ich lauter verschiedene aufrufe hab? Für jeden ne extra prozedur schreiben?

MfG - Ghost007

SirThornberry 12. Jan 2008 15:34

Re: Kurze frage zu Thread
 
was für Fehler bekommst du denn?
Genau, für jeden eine extra Procedure schreiben oder eine Variable setzen und abhängig vom Wert der Variablen in der Procedure was anderes machen.

ghost007 12. Jan 2008 15:48

Re: Kurze frage zu Thread
 
Hi,
kann mich an den fehler nicht mehr genau verhindern und hab das dann auch nich gespeichert (ich weiß, war doof -.-) aber irgendwas mit device could not be displayed oder so.

MfG - Ghpst007

Dunkel 12. Jan 2008 15:52

Re: Kurze frage zu Thread
 
Jo, typische Fehlermeldung wenn man aus einem Thread direkt auf die VCL zugreift.

sirius 12. Jan 2008 16:17

Re: Kurze frage zu Thread
 
Zitat:

Zitat von ghost007
Hm,
und wie mach ich das am schlausten, wenn ich lauter verschiedene aufrufe hab? Für jeden ne extra prozedur schreiben?

MfG - Ghost007

Ja, sieht so aus.

ghost007 12. Jan 2008 16:23

Re: Kurze frage zu Thread
 
Eine frage noch.

Muss ich nur procedureen für die zugriffe auf die GUI schreiben oder für alles was beide benutzten ? z.b. einen ini-file


MfG - Ghost007

sirius 12. Jan 2008 16:30

Re: Kurze frage zu Thread
 
Jein.
Im Einzelfall musst du das selber prüfen.
Generell gilt, du darfst nicht aus verschiedenen Threads auf dieselben Variablen zugreifen. Und da z.B. die VCL das nicht verhindert, kannst du generell auf Klassen der VCL nicht gleichzeitig greifen.

Bei dateien könntest du aber prüfen, ob es Shared-Read-Access o.ä. gibt und du öffnest die datei zweimal.
Aber irgendwie hat dein Thread ziemlich viel mit dem Mainthread gemeinsam. Evtl. solltest du das Konzept überdenken und nur das in einen Thread legen, was er wirklich unabhängig von allem anderen machen kann. Ergebnisse kannst du ja zwischenspeichern.

ghost007 12. Jan 2008 17:20

Re: Kurze frage zu Thread
 
Zitat:

Zitat von sirius
Jein.
Im Einzelfall musst du das selber prüfen.
Generell gilt, du darfst nicht aus verschiedenen Threads auf dieselben Variablen zugreifen. Und da z.B. die VCL das nicht verhindert, kannst du generell auf Klassen der VCL nicht gleichzeitig greifen.

Bei dateien könntest du aber prüfen, ob es Shared-Read-Access o.ä. gibt und du öffnest die datei zweimal.
Aber irgendwie hat dein Thread ziemlich viel mit dem Mainthread gemeinsam. Evtl. solltest du das Konzept überdenken und nur das in einen Thread legen, was er wirklich unabhängig von allem anderen machen kann. Ergebnisse kannst du ja zwischenspeichern.

Hi,
das problem ist das ich ne for-schleife hab, die ca. 5 mal duchläuft, ein durchlauf dauert zwischen 20sec-Xsec da in der zeit das programm langsam/gar nicht reagiert hab ich mir gedacht pack ich den prozess in nen thread. Um das ganze zu realisieren, muss ich aber die ganze for-schleife in den thread packen, sonst hab ich ja nichts gewonnen. Oder?

MfG - Ghost007


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

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