Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 04:36

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Thread und Calllist ?
BeitragVerfasst: Fr Mär 31, 2006 16:35 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

folgendes Problem, sicher nur eine Kleinigkeit.

Also es gibt die Form1, darauf ist das OGL Panel.
Auf dem werden mit Calllisten verschiedene sachen dargestellt.
Die Calllisten erstellen ist ein bischen kompliziert und rechenaufwendig.
Es muss eine Datei gedownloadet werden und dann muss diese zerlegt werden.
Aus den Daten dieser Datei entstehen dann verschiedene Listen, die auf dem GL Panel dargestellt werden sollten.

Das ganze sieht ungefähr so aus :

Code:
  1.  
  2. unit u_main;
  3.  
  4. interface
  5.  
  6. uses
  7. .
  8. .
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12. .
  13. .
  14. .
  15.   procedure ReadATC; (( erstelle Listen ))
  16. end;
  17.  
  18. // der Thread soll die Datei downloaden und die Listen erstellen
  19. type
  20.     TATCThread = class(TThread)
  21.     private
  22.       { Private-Deklarationen }
  23.     protected
  24.       procedure Execute; override;
  25.     public
  26.       constructor Create;
  27.     end;
  28.  
  29. var
  30.   liste1, Liste2 : TGLuint; // sind also global
  31.  
  32.  
  33. constructor TATCThread.Create;      // Checks online FPL
  34. begin
  35.   inherited Create(True);
  36. end;
  37.  
  38. procedure TATCThread.Execute;
  39. begin
  40.   while (not Self.Terminated) do
  41.   begin
  42.     Form1.ReadATC;
  43.   end;
  44. end;
  45.  
  46. procedure TForm1.ReadATC;
  47. begin
  48.    Liste1 erstellen
  49.    Liste2 erstellen
  50. end;
  51.  
  52. procedure TForm1.render;
  53. begin
  54.   glCallList(Liste1); // geht nicht...wird nix dargestellt
  55.   glCallList(Liste2);
  56.  
  57.   if glIsList(Liste1) then
  58.     Debug('Liste');  // keine ausgabe... heisst wohl die Liste gibts nicht oder sie ist leer
  59. end;
  60.  
  61.  


Ich hoffe die Infos reichen für eine Hilfe ?

Was mach ich denn da falsch ?

Matthias[/pascal]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 17:26 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Was sagt den glError?
Weil es nur ein Fehler bei der Erstellung der Liste sein kann.

Edit:
Habe erst jetzt den Thread gesehen.
Dort ist OGL nicht initialisiert.
Deine OGL-Initialisierung gilt nur für einen Thread (dein Main-Thread/Programm).
Du könntest mit wgl-current rumspielen und wenn du es geschafft hast dein Ergebnis hier veröffentlichen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 17:34 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

na das hab ich doch schon getestet. Wollte es erst noch hinschreiben.
Wenn ich ( zum Testen ) einen Timer auf die Form zieher und im ontimer ReadATC aufrufe, dann gehts doch.
Ich hab nur das wichtigste hingeschrieben, also OGL is schon initialisiert :-)

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 18:01 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Natürlich ist OGL schon initalisiert.
Aber nur in einem der beiden Threads.
Du müsstest den Rendercontext aus dem ersten Thread in den zweiten einbinden.

Genauere Erklärung findest du in dem Topic:
http://www.delphigl.com/forum/viewtopic.php?t=4751


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 18:48 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

meist Du DC und RC ?
Ich hab keine Ahnung wie ich das machen soll .. sorry.

Hab probiert in der Procedure die vom Thread ausgeführt wird

if not wglMakeCurrent(DC,RC) then
Debug('Kritischer Fehler');

kommt immer kritischer fehler... keine ahnung was ich da machen soll ?

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 20:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also so gehts nicht. Du kannst das nur in einem Thread aus starten. Also wenn du OpenGL im Thread benutzen möchtest musst es auch dort initialisieren. Du kannst es aber nicht im VCL Thread initialisieren und in einem anderen Benutzen. OpenGL ist Threadgebunden. Geht leider nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 20:22 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

einer bietet ne Lösung an, der andere sagt es geht überhaupt nicht .. na was denn nun ?

Was kann ich denn nun machen ?
Geht es nun irgendwie oder nicht ?

Wenn ja dann wie ?

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 20:38 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Ich biete dir eine mögliche Lösung an.
Ob sie funktioniert weiss ich nicht.
Bei mir habe ich dann nach einen OGL und einen restlichen Thread getrennt.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]