Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zwei Proceduren gleichzeitig starten ohne Thread ? (https://www.delphipraxis.net/92931-zwei-proceduren-gleichzeitig-starten-ohne-thread.html)

turboPASCAL 29. Mai 2007 03:59


Zwei Proceduren gleichzeitig starten ohne Thread ?
 
Hi,

ist es möglich zwei Proceduren gleichzeitig zu starten ohne dafür einen Thread zu verwenden ?
Ich habe das Problen das ich bei OpenGL im Hintergrund etwas laden möchte aber OpenGL nicht
Threadsicher ist. Führe ich diese Actionen in einem Thread aus Gibt es Probleme bei der Darstellung
zB. es Fehlen Texturen.

mkinzler 29. Mai 2007 05:45

Re: Zwei Proceduren gleichzeitig starten ohne Thread ?
 
Ohne Threads kann man immer nur eine Prozedur/Funktion gleichzeitig ausführen.

r2c2 29. Mai 2007 07:45

Re: Zwei Proceduren gleichzeitig starten ohne Thread ?
 
Es gäb natürlich noch die Möglichkeit mit Application.ProcessMessages was zusammenzufriemeln, aber dein Posting liest sich nicht gerade so, als wäre das eine praktikable Lösung.

Ansonsten könnte man natürlich die Prozedur in n eigenen Prozess auslagern. *gerade an Daniels Meisterwerke denkt* Das geht AFAIK auch irgendwie per COM...

//Edit:
haha, aber wie siehts mit den Daten aus... hm...

mfg

Christian

glkgereon 29. Mai 2007 07:48

Re: Zwei Proceduren gleichzeitig starten ohne Thread ?
 
Ich habe jetzt noch nie mit OpenGL gearbeitet, aber wäre nicht folgendes möglich?

Lade in einem seperaten Thread die Daten in eine zunächst unabhängige Klasse und sobald du fertig bist beendet sich dieser Thread und der erste nimmt sich die Klasse und stopft sie in OpenGL rein...

Corpsman 29. Mai 2007 09:23

Re: Zwei Proceduren gleichzeitig starten ohne Thread ?
 
Da ich mal davon ausgehe da Turbopascal Texturen Laden will geht das net.

Die können immer nur vom Selben Thread aus geladen werden.

Ich hatte das Prob auch mal und dir wird nix anderes Übrig bleiben als die Texturen im Vornherein zu laden, bzw den Letzen Schritt ( als GLtgenTexture .. oder wie das hies ) must halt im Selben Thread machen.

Reinhard Kern 29. Mai 2007 09:32

Re: Zwei Proceduren gleichzeitig starten ohne Thread ?
 
Zitat:

Zitat von turboPASCAL
Hi,

ist es möglich zwei Proceduren gleichzeitig zu starten ohne dafür einen Thread zu verwenden ?
Ich habe das Problen das ich bei OpenGL im Hintergrund etwas laden möchte aber OpenGL nicht
Threadsicher ist. Führe ich diese Actionen in einem Thread aus Gibt es Probleme bei der Darstellung
zB. es Fehlen Texturen.

Hallo,

man kann schon mehr als einen Messagehandler auf einmal ausführen, meistens ist das eher ungewollt und führt zu überraschenden Ergebnissen - Voraussetzung ist, dass die Messagehandler nicht die Warteschlange blockieren, also dass sie ProcessMessages aufrufen, sonst kommt die nächste Message nicht an. Dafür kannst du bei eigenen Prozeduren ja sorgen.

Dann könntest du dir selbst z.B. 2 User-Messages schicken, die entsprechende Funktionen starten, Timer müsste auch gehen. Im Prinzip ist eine Timerroutine ja ein parallel laufendes Hintergrundprogramm.

Gruss Reinhard

3_of_8 29. Mai 2007 10:02

Re: Zwei Proceduren gleichzeitig starten ohne Thread ?
 
Setz dir halt einfach ne Semaphore.

Der Lade-Thread setzt eine Eigenschaft von sich auf True und der andere Thread kann die dann auslesen und schauen, ob der Lade-Thread schon fertig ist.

Phoenix 29. Mai 2007 10:16

Re: Zwei Proceduren gleichzeitig starten ohne Thread ?
 
Zitat:

Zitat von Reinhard Kern
man kann schon mehr als einen Messagehandler auf einmal ausführen, meistens ist das eher ungewollt und führt zu überraschenden Ergebnissen - Voraussetzung ist, dass die Messagehandler nicht die Warteschlange blockieren, also dass sie ProcessMessages aufrufen, sonst kommt die nächste Message nicht an. Dafür kannst du bei eigenen Prozeduren ja sorgen.

Es gibt da auch ne andere Methode: siehe hier.
Im Prinzip wird hier der Eventhandler dazu verwendet, der Reihe nach eine beliebige Anzahl von anderen Eventhandlern aufzurufen. Somit kann man an ein Event beliebig Handler hängen.

Vielleicht hilft das, um vorher noch kurz die Daten zu laden, da die Methode ja auch erst zurückkommt wenn sie fertig ist.

OregonGhost 29. Mai 2007 10:23

Re: Zwei Proceduren gleichzeitig starten ohne Thread ?
 
Vor langer Zeit habe ich mal eine Terrain-Engine in Direct3D geschrieben, die eine ähnliche Funktionalität benötigte. Basistexturen und Heightmaps mussten dynamisch von der Festplatte geladen werden, je nachdem wohin man sich bewegte, und dann musste die Heightmap in ein Mesh umgewandelt werden, und aus den Basistexturen wurden die tatsächlichen Texturen generiert. Dabei kannst du problemlos alles, was nicht direkt mit der 3D-API zu tun hat, in einem separaten Thread machen (insbesondere das eigentliche Laden, da kommt z.B. auch asynchrone IO in Frage). Ein paar Dinge müssen eben im Hauptthread gemacht werden, in meinem Fall das Generieren der Texturen (das hat die 3D-Karte gemacht), oder im einfacheren Fall das Kopieren der Texturdaten in eine Hardware-Textur. Wenn das lange dauert, musst du die Arbeit aufsplitten. Mein System hat zum Beispiel pro Frame maximal eine Textur generiert, und der Thread zum Umformen der Heightmap in ein Mesh hat nach spätestens einem Segment die CPU abgegeben. Wenn man die Daten einigermaßen geschickt im Voraus lädt, kommt es dann nie zum Stocken in dem Moment, in dem die Textur oder der Mesh tatsächlich benötigt wird.

TeronG 29. Mai 2007 10:33

Re: Zwei Proceduren gleichzeitig starten ohne Thread ?
 
Zitat:

Zitat von 3_of_8
Setz dir halt einfach ne Semaphore.

:gruebel:
Für alle wie mich die keine AHnung hatten :mrgreen: Semaphor (Informatik)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:43 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