Seite 1 von 2

Init aus Thread klappt nicht!

Verfasst: 09.11.2007 22:09
von Scarabol
Hi Leute,

hab gerade eine mehr oder weniger aufwendige GUI erstellt, die eigentlich die ganze Sprite Geschichte und so initialisieren sollte.

Dann stellte ich aber mit großem Ärger fest, das alles umsonst war weil man z.B. Initsprite() nicht aus einem Thread starten kann... :evil:

Code: Alles auswählen

Procedure Init()
  InitSprite()
EndProcedure

t = CreateThread(@Init(), 0)

WaitThread(t)

Debug OpenScreen(1024, 768, 32, "test")
Gruß
Scarabol

Verfasst: 09.11.2007 22:26
von AND51
Wieso packst du InitSprite() in einen eigenen Thread?
AFAIK muss der nur einmal am Anfang deines Codes (Hauptprozedur) stehen.

Oder willst du die Zeit, die zum Initialisieren benötigt wird, in einen Thread auslagern, damit der Hauptthread weiterarbeiten kann? Wenn ja, macht dein Code wenig Sinn, da du sowieso WaitThread() benutzt und dieser Vorgang sowieso nicht lange dauert.

Initialisiere einmal zu Beginn deines Programms und es sollte funktionieren.

Verfasst: 09.11.2007 23:00
von PMV
DirectX-Befehle dürfen nicht in Threads ausgelagert werden. Was
übrigends an DX liegt und nicht an PB :D

MFG PMV

Verfasst: 09.11.2007 23:17
von AND51
Oh ja stimmt, da hätte ich auch dran denken müssen.
Dennoch erkenne ich den Sinn nicht, Init*() Befehle in einen Thread auszulagern?

@ Scarabol:
Vielleicht kannst du uns ja noch ein bisschen mehr verraten.

Verfasst: 10.11.2007 02:05
von Scarabol
AND
Du hast schon richtig geraten, ich hab das Init in einen Thread auslagern wollen, damit das Hauptfenster währenddessen aktiv bleibt.

Das macht auch soweit Sinn nur halt nicht in dem Code oben, da es sich um eine abgespeckte Version handelt die nur das Problem deutlich machen sollte...

Gruß
Scarabol

Verfasst: 10.11.2007 10:25
von Scarabol
So hab mich jetzt die ganze Nacht ausgeheult und damit abgefunden, das ich nochma anfange....

Könnte man denn vielleicht die Hilfe ergänzen....

Gruß
Scarabol

Verfasst: 10.11.2007 10:36
von edel

Code: Alles auswählen

Procedure Init()
ist falsch.

es muss heissen

Code: Alles auswählen

Procedure Init(ICHBINWICHTIG.l)

Verfasst: 10.11.2007 15:50
von Scarabol
Wie?

Funzt es dann?

Gruß
Scarabol

Verfasst: 10.11.2007 15:57
von AND51
> Wie? Funzt es dann?
omg, und schon wieder etwas, wo ich auch hätte drauf kommen müssen!
Proceduren, die als Thread ausgeführt werden sollen müssen einen Parameter haben!

Ob es dann funktioniert: Möglicherweise ja. Dennoch sollte/darf man DirectX nicht in Threads benutzen, das steht in der Hilfe...

Nebenbei ist mir auch klar geworden, warum ich in meinem aktuellen Projekt festhänge: Ich benutze munter CreateSprite(), CreateSprite3D(), dann drehe ich noch ein paar Sprites und mach dies und das...

...und wunder mich, warum das irgendwann nicht mehr klappt! >_<
Danke für diesen Thread!

Verfasst: 10.11.2007 15:59
von Scarabol
Öhm ja, wieso muss da den ein Parameter übergeben werden, bei mir hats bisher immer ohne funktioniert...

Gruß
Scarabol