AGB  ·  Datenschutz  ·  Impressum  







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

VCL Multithread zB. TBitMap Zugriff

Ein Thema von bernhard_LA · begonnen am 1. Jul 2012 · letzter Beitrag vom 3. Jul 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#1

AW: VCL MULTITHREAD zB. TBITMAP ZUGRIFF

  Alt 1. Jul 2012, 16:13
ist dies die beste Lösung zu diesem Thema ?
Es kommt drauf an, was genau du machen willst.

Das Create wird noch im Hauptthread verarbeitet, daher kann man dort alles machen, was auch ohne Thread möglich ist.

Wenn die übergebenen Objekte nirgenwo in der VCL benutzt werden, also wenn die VCL, bzw. der Hauptthread oder ein anderer Thread nicht darauf zugreifen, dann kann man danach im Thread diese Objekte problemlos nutzen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: VCL MULTITHREAD zB. TBITMAP ZUGRIFF

  Alt 1. Jul 2012, 18:11
Also bei TBitmap bzw. TCanvas im speziellen reicht es nach meiner Erfahrung, (Bitmap.)Canvas.Lock/Unlock aufzurufen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#3

AW: VCL MULTITHREAD zB. TBITMAP ZUGRIFF

  Alt 1. Jul 2012, 19:10
Hmm, von der Absicherung her sollte das dann wohl der CriticalSection Sperrung entsprechen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: VCL MULTITHREAD zB. TBITMAP ZUGRIFF

  Alt 1. Jul 2012, 19:56
könnte ich mir durch diesen Ansatz eine ThreadSafe VCL Zusammenbasteln,
ich müsste halt die wichtigsten Funktionen innerhalb von .Create (....) oder .... bereitstellen; Mir gehts um das Konzept - möglichst flexibel - gut lesbar - einfach - Stabil .....


Delphi-Quellcode:

  THreadSafeMemo = class(TThread);


     Fmemo : Tmemo;

      constructor Create(amemo : TMemo)

      procedure AddText (aString : String);

      .....
  end;


 ThreadSafeMemo.constructor Create(amemo : TMemo)
 begin
       Fmemo := Tmemo;
.....
end;

Geändert von bernhard_LA ( 1. Jul 2012 um 20:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: VCL MULTITHREAD zB. TBITMAP ZUGRIFF

  Alt 1. Jul 2012, 21:24
Das Create wird noch im Hauptthread verarbeitet, daher kann man dort alles machen, was auch ohne Thread möglich ist.

Wenn die übergebenen Objekte nirgenwo in der VCL benutzt werden, also wenn die VCL, bzw. der Hauptthread oder ein anderer Thread nicht darauf zugreifen, dann kann man danach im Thread diese Objekte problemlos nutzen.
Nicht unbedingt. Das Hauptproblem von VCL-GUI-Controls ist ja das die Win32-Ressourcen Thead-Affine sind. D.h. ein (Fenster-)Handle darf nur im Thread verwendet werden indem er erzeugt wurde. D.h. will man ein (T)Bitmap im Thread verändern so muss es auch in diesem erzeugt werden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: VCL MULTITHREAD zB. TBITMAP ZUGRIFF

  Alt 1. Jul 2012, 21:47
Hmm, aber es ist doch möglich, selbst Fenster von fremden Anwendungen zu manipulieren (z.B. einen disableten Button zu enablen, SetWindowPos etc.)
Was Bitmaps angeht: Da habe ich gerade erst ein kleines Programm geschrieben, bei dem ein Thread auf ein Bitmap zeichnet, das im Constructor des Threads erzeugt wird (also somit noch im Hauptthread), und dieses regelmäßig auf das Canvas einer Form kopiert. Läuft absolut zuverlässig und stabil, solange für beide Canvasse jeweils Lock und Unlock aufgerufen wird.

Ich dachte das Problem bei der VCL wären eher globale Variablen, die intern zur Verwaltung dienen.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#7

AW: VCL MULTITHREAD zB. TBITMAP ZUGRIFF

  Alt 2. Jul 2012, 07:55
Hmm, aber es ist doch möglich, selbst Fenster von fremden Anwendungen zu manipulieren (z.B. einen disableten Button zu enablen, SetWindowPos etc.)
Das macht man dann aber über Windowsnachrichten, die dann von dem für das Fenster zuständigen Thread abgearbeitet werden.

Ich dachte das Problem bei der VCL wären eher globale Variablen, die intern zur Verwaltung dienen.
Wenn das so einfach währe, hätte Borland damals sicher auch eine threadsichere VCL gebaut.

Dein Beispiel mit dem Memo kann so nur stabil funktionieren, wenn der Thread alle Zugriffe und Aktionen mit dem Memo im Synchronize ausführt.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.646 Beiträge
 
Delphi 12 Athens
 
#8

AW: VCL MULTITHREAD zB. TBITMAP ZUGRIFF

  Alt 2. Jul 2012, 08:25
Dein Beispiel mit dem Memo kann so nur stabil funktionieren, wenn der Thread alle Zugriffe und Aktionen mit dem Memo im Synchronize ausführt.
Das Problem ist eben, daß man zwar seine eigenen Zugriffe auf VCL-Komponenten und ihre Eigenschaften threadsicher gestalten kann, aber nicht die der VCL selbst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#9

AW: VCL MULTITHREAD zB. TBITMAP ZUGRIFF

  Alt 2. Jul 2012, 09:01
Jupp, wärend man dem grade im Thread was mit dem Memo macht, könnte es auch passieren daß die VCL zur selben Zeit auch was damit anstellt und sei es nur ein Repaint.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: VCL Multithread zB. TBitMap Zugriff

  Alt 2. Jul 2012, 09:17
Wenn eine GUI Kommunikation synchronized erfolgen kann, dei Hauptarbeit aber in einem Thread erfolgen kann könnte mein Anhang hier gegf. interessant sein http://www.delphipraxis.net/130951-b...d-laden-2.html
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:50 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