Init aus Thread klappt nicht!

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Init aus Thread klappt nicht!

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

DirectX-Befehle dürfen nicht in Threads ausgelagert werden. Was
übrigends an DX liegt und nicht an PB :D

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Code: Alles auswählen

Procedure Init()
ist falsch.

es muss heissen

Code: Alles auswählen

Procedure Init(ICHBINWICHTIG.l)
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Wie?

Funzt es dann?

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Öhm ja, wieso muss da den ein Parameter übergeben werden, bei mir hats bisher immer ohne funktioniert...

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Antworten