AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie kann man TThread synchronize ausbauen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann man TThread synchronize ausbauen ?

Ein Thema von Corpsman · begonnen am 16. Jan 2007 · letzter Beitrag vom 16. Jan 2007
Antwort Antwort
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#1

Wie kann man TThread synchronize ausbauen ?

  Alt 16. Jan 2007, 20:33
Hallo,

Ich habe hier ein Kleines Programm geschrieben das hergeht und in einem Thread ein JPG File in OpenGL laden soll.

Das Problem ist das das nur geht wenn ich in dem Thread die Laderoutine mit Synchronize aufrufe. Das aber macht dann den ganzen Sinn des Threads kaputt, da ich ja schlieslich im Hintergrund das Bild LAden will und meine Anwendung nicht Mit dem Laden blockieren soll.

Anbei habe ich euch das Ganze Programm mal hochgeladen so könnt ihr den Fehler ansehen.
Angehängte Dateien
Dateityp: zip problem_153.zip (444,2 KB, 4x aufgerufen)
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Wie kann man TThread synchronize ausbauen ?

  Alt 16. Jan 2007, 20:34
Soweit ich weiß, sollte man in nem Extra-Thread nicht an der GUI rumfummeln... Kann übel ausgehen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Wie kann man TThread synchronize ausbauen ?

  Alt 16. Jan 2007, 20:43
Ich Fummle ja nicht an der Gui Rum.

Ich will lediglich aus nem Tmemorystream ein JPG File in eine OpenGL Variable Laden. und das eben in einem Thread.

Ein Kumpel meinte das es wohl nur daran Liegt das in Zeile 237 von Textures.pas

  BMP.canvas.draw(0, 0, JPG); steht und das eine VCL anweisung sei.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Wie kann man TThread synchronize ausbauen ?

  Alt 16. Jan 2007, 20:43
Was hälst denn davon?
Delphi-Quellcode:
 Tloader = Class(TThread)
  public
    Procedure Execute; override;
    Constructor Create;
  private
    m:Tmemorystream;
    procedure tosync;
  End;

//...

Procedure TILoeader.tosync;

Begin
  LoadTextureStream(m, {form1.}img);
End;

Procedure Tloader.Execute;
var f:Tfilestream;
Begin
  f := Tfilestream.create('Test.jpg', fmopenread);
  m := Tmemorystream.create;
  m.CopyFrom(f, f.size);
  m.position := 0;
  
  Synchronize(tosync);
  m.free;
  f.ree;
End;
Nur die referenz auf Form1 sollte man noch überdenken.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Wie kann man TThread synchronize ausbauen ?

  Alt 16. Jan 2007, 20:51
Also um es Klar aus zu drücken.


Es Bringt nichts.

Wie euch sicherlich Klar ist mache ich das ja in einer total anderen Anwendung, und da sind die jpg Dateien natürlich deutlich Größer , aber selbst in dem Sample hier ist es schon so das wenn ich eine entsprechend Große Datei Lade es nicht mehr Geht.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Wie kann man TThread synchronize ausbauen ?

  Alt 16. Jan 2007, 20:56
Ich hab mal kurz weiter reingesehen. Ich vermute das Problem kommt erst bei createtextures (bzw. spätestens da) Das BMP ist liegt irgendwo frei im Speicher und hat mit dem Hauptthread nix zu tun. Aber createtextures benutzt min eine paar gl-Funktionen und vor allem globale Variablen..
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Wie kann man TThread synchronize ausbauen ?

  Alt 16. Jan 2007, 21:16
Also ,

Ich hab das mal nun Zerhackstückelt und in Ettliche Globale Variablen Ausgelagert.

dann geschaut was per synchronize gemacht werden mus und was nicht.

Und Sirius hat recht.

Die Function CreateTexture ist das Problem

diese habe ich mit Synchronize gemacht und schwups gehts.

Und da diese Function zum Glück sehr schnell ist kann ich es so lassen.

Danke für die schnelle Hilfe.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Wie kann man TThread synchronize ausbauen ?

  Alt 16. Jan 2007, 21:22
Natürlich bastelst du an der GUI rum. Nämlich genau damit, was du da oben geschrieben hast: In einem Nicht-Hauptthread auf die GUI zeichnen ist einfach BÖSE BÖSE BÖSE. Hab ich in meinem vorherigen Beitrag doch gesagt.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  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 20:23 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