Verfasst: 10.11.2007 16:19
Wenn du alle DX Funktionen in einen Thread packst sollte das auch gehen. D.h. InitSprite, OpenScreen, LoadSprite, DisplaySprite etc. muss dann alles drin sein.
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Code: Alles auswählen
Global StopThread.l = #False
Procedure SpriteBefehle(ID.l)
InitSprite()
OpenWindowedScreen(ID, 0, 0, 640, 480, 0, 0, 0)
CreateSprite(0, 100, 100)
StartDrawing(SpriteOutput(0))
For x = 0 To 99
For y = 0 To 99
Plot(x, y, x * y * 100)
Next
Next
StopDrawing()
Timer = ElapsedMilliseconds()
Repeat
If Timer + 1000 <= ElapsedMilliseconds()
ClearScreen(0)
DisplaySprite(0, Random(639), Random(479))
Timer + 1000
EndIf
FlipBuffers(#True)
Until StopThread = #True
EndProcedure
ID = OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "Sprite Thread")
While WindowEvent() : Wend
Thread = CreateThread(@SpriteBefehle(), ID)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
StopThread = #True
WaitThread(Thread)
Könnte es sein, dass jeder Thread für sich (auch der Mainthread) DirectX initialiseren muss?PMV hat geschrieben:Prozeduren, welche als Thread gestartet werden sollen,
immer mit einem LONG-Parameter ausstatten.{/quote]Aber warum gehen dann auch Strings? Früher hatte ich mal einen Code, da habe ich Strings übergeben und es klappte. Ist das wieder sonne Sache, wie Sachen intern in PB übergeben werden? Kenne mich da nicht so aus...
PMV hat geschrieben:Hm, stimmt ... wenn man alle DX-Befehle in einen Thread packt, dann gehts tatsächlich
Code: Alles auswählen
Procedure MyThread(*Value.quad)
Debug *Value\q
EndProcedure
wert.q = $7FFFFFFFFFFFFFFF
hThread = CreateThread(@MyThread(), @Wert)
WaitThread(hThread)