AGB  ·  Datenschutz  ·  Impressum  







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

Thread mit komischem Verhalten

Ein Thema von Schwedenbitter · begonnen am 19. Jan 2016 · letzter Beitrag vom 19. Jan 2016
Antwort Antwort
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 07:38
Danke nochmal für die zahlreichen Antworten.
Nur um Klarheit zu bekommen. Man kann kein Bitmap-Objekt in einem Thread außer dem Hauptthread erstellen?
Das kann ich mir nicht vorstellen. Anderenfalls wäre zu erwarten gewesen, dass im Hilfetext zumindest irgend ein Sterbenswörtchen zu lesen wäre. Ist es aber nicht. Nichtsdestotrotz werde ich mir mal graphics32.org ansehen. Am Ende ist mir wichtig, dass es irgendwie funktioniert und nicht warum - leider.
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 10:05
@Medium

Das Problem hängt mit der Koppelung zwischen TBitmap und TCanvas zusammen. Der Canvas selber wird allerdings lazy erstellt (was manchmal selbst zu seltsamen Ergebnissen führt, die sich durch ein einfaches myBitmap.Canvas; lösen können.

TCanvas ist nicht thread-safe und kann auch nicht thread-safe verwendet werden (intern gibt es da globale Abhängigkeiten) und darum ist TBitmap nicht thread-safe.

Was allerdings nicht heißt, dass es keine Anwendungen gibt, die ein TBitmap in einem Thread verwursten und es sogar funktioniert. Die haben einfach nur Glück wenn es funktioniert. Diese "race conditions" tauchen auf, wenn sie wollen und nicht wenn man es von ihnen erwartet
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 12:55
TCanvas ist nicht thread-safe und kann auch nicht thread-safe verwendet werden (intern gibt es da globale Abhängigkeiten) und darum ist TBitmap nicht thread-safe.
OK, das erklärt es. Man könnte dann aber auf die Windows API Bitmap Funktionen zurückgreifen und so die Klasse TCanvas vermeiden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 13:33
manuell in den ScanLines kann man auch rumhantieren, bzw auf dem HDC ohne die Funktionen des TCanvas (wie Luckie anregte), aber da natürlich nur TCanvas.Handle zusammen mit Delphi-Referenz durchsuchenTCanvas.Lock.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 14:46
Ich ändere doch gar nichts am Bitmap. Ich lade lediglich die Datei, um dann mittels TPngImage.Assign(); aus dem Bitmap eine PNG zu machen und diese dann zu speichern.

Ich habe jetzt den Units runtergeladen, um TBitmap32 nutzen zu können. Allerdings weigert sich das laufende Programm - der Compiler bringt keinen Fehler -, die Bilddaten mittels Assign an ein TPngImage weiterzugeben. Ich bilde mir ein, gestern Abend bei meinen Recherchen so etwas wie ein ein passendes PNG gesehen zu habe. Ich finde das aber irgendwie nicht wieder.

Kann mir dabei jemand noch helfen?
Hier hat leider niemand mehr geantwortet.
Alex Winzer
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
297 Beiträge
 
Delphi 12 Athens
 
#6

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 15:43
Schau mal hier vorbei http://sourceforge.net/projects/gr32pnglibrary/
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 18:13
Danke. Das funktioniert perfekt.
Gibt es dazu auch ein Pendant für JPG? Ich suche schon eine ganze Weile. Und alles was ich bislang dazu gefunden habe basiert darauf, dass TBitmap32 zunächst zu einem TBitmap assigned und dieses wiederum zu einem TJPEGImage assigned wird.
Damit habe ich aber wieder das TBitmap drinnen, was mir gerade die Probleme mit dem Thread verursacht
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 15:54
Ich ändere doch gar nichts am Bitmap. Ich lade lediglich die Datei,
Lesen oder Schreiben ... du greifst multithreaded auf Dinge zu, die nicht threadsave sind.

Auch beim Lesen gibt es manchmal Schreibzugriffe (1), bzw. es knallt, wenn man was lesen will, daß jemand anderes grade verändern täte.

1) Gutes Beispiel sind (File)Streams. Da wird der Lesezeiger/Position veändert, während man liest. (außer man verwendet die entsprechenden asynchronen Lesefunktionen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Thread mit komischem Verhalten

  Alt 19. Jan 2016, 10:13
Das kann ich mir nicht vorstellen. Anderenfalls wäre zu erwarten gewesen, dass im Hilfetext zumindest irgend ein Sterbenswörtchen zu lesen wäre. Ist es aber nicht.
Genau darüber habe ich mich neulich auch gewundert:

War mir persönlich auch vollkommen neu. Haben wir alle die Doku nicht richtig gelesen oder steht das da schlichtweg nicht drin?
Siehe: http://www.delphipraxis.net/186810-t...ml#post1317616
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:27 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 by Thomas Breitkreuz