[Programm] Bilder in Threads laden
Verfasst: 30.01.2014 19:19
Hier geht es zwar um Grafik, der Inhalt ist aber ein Thread-Problem, deshalb kommt dies hier nicht in die Grafik- und Sound-Abteilung.
Ich versuche ein Programm zu schreiben, was Bilddateien, Bitmaps, einlädt. Die Besonderheit: das Laden soll als Thread ablaufen - jedes Bild ein einzelner Thread - damit das Programm sich entfalten kann, bevor die Bilder in dem MDIGadget angezeigt werden (jedes Bild ein MDIWindow).
Warum funktioniert mein Code nicht?
Die Images()\ID wird bei mir immer null sein. Warum? Was mache ich falsch?
Schönen Abend und Danke im Vorraus,
es_91.
Ich versuche ein Programm zu schreiben, was Bilddateien, Bitmaps, einlädt. Die Besonderheit: das Laden soll als Thread ablaufen - jedes Bild ein einzelner Thread - damit das Programm sich entfalten kann, bevor die Bilder in dem MDIGadget angezeigt werden (jedes Bild ein MDIWindow).
Warum funktioniert mein Code nicht?
Code: Alles auswählen
Structure IMAGE
ID.i
EndStructure
Structure MDIWINDOW
ID.i
ImageGadget.i
EndStructure
Global NewList Images.IMAGE()
Global NewList MDIWindows_Main.MDIWINDOW()
Global NewList ProgramParams$()
Global NewList LoadingThreads()
Global NewList ThreadEntriesToDelete()
NewList ProgramParams$()
Procedure LoadingThread(*FileName$)
AddElement(Images())
Images()\ID = LoadImage(#PB_Any, *FileName$)
EndProcedure
While ProgramParameter(x)
AddElement(ProgramParams$())
ProgramParams$() = ProgramParameter(x)
x + 1
Wend
Window_Main_Title$ = "just a little test program..."
Window_Main = OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 640, 400, Window_Main_Title$, #PB_Window_Invisible|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
MDIGadget_Main = MDIGadget(#PB_Any, 0, 0, 0, 0, 0, 0)
HideWindow(Window_Main, #False)
ForEach ProgramParams$()
AddElement(LoadingThreads())
LoadingThreads() = CreateThread(@LoadingThread(), @ProgramParams$())
Next
Repeat
MenuHeight_Main = 0
ToolBarHeight_Main = 0
ForEach LoadingThreads()
If Not IsThread(LoadingThreads())
SelectElement(Images(), ListIndex(LoadingThreads()))
AddElement(MDIWindows_Main())
MDIWindows_Main()\ID = AddGadgetItem(MDIGadget_Main, #PB_Any, "", ImageID(Images()\ID))
MDIWindows_Main()\ImageGadget = ImageGadget(#PB_Any, 0, 0, WindowWidth(MDIWindows_Main()), WindowHeight(MDIWindows_Main()), Images()\ID)
AddElement(ThreadEntriesToDelete())
ThreadEntriesToDelete() = LoadingThreads()
EndIf
Next
WindowEvent = WindowEvent()
Select WindowEvent
Case #PB_Event_SizeWindow
ResizeGadget(MDIGadget_Main, 0, 0, WindowWidth(Window_Main), WindowHeight(Window_Main))
Case #PB_Event_CloseWindow
End
EndSelect
ForEach ThreadEntriesToDelete()
ForEach LoadingThreads()
If LoadingThreads() = ThreadEntriesToDelete()
DeleteElement(LoadingThreads())
Break
EndIf
Next
Next
ForEver
Schönen Abend und Danke im Vorraus,
es_91.