Verfasst: 17.01.2007 13:48
@Hugo:
Sowas hier wäre wohl richtig:
@Nic: Freak meinte wohl eher, dass es genau eine Event-Schleife geben
kann, und diese in einem Thread laufen könnte. Du erstellst hier aber
5 Event-Schleifen.
Aber ich bin mir da leider auch nicht so sicher
Sowas hier wäre wohl richtig:
Code: Alles auswählen
; enable ThreadSafe!
EnableExplicit
Procedure CreateWindow()
OpenWindow(0, 200, 200, 500, 600, "Test")
CreateGadgetList(WindowID(0))
ButtonGadget(1, 20, 20, 100, 50, "Update")
ListIconGadget(2, 20, 90, 460, 490, "List", 200)
; wir werden zum ListIconGadget nen Mutex erstellen:
Global LCAccess.l = CreateMutex()
EndProcedure
; das ist unser Thread!
Procedure UpdateList(Gadget.l)
Protected NewList ll.s()
Protected z.l
; noch kurz den Update-Button deaktivieren
DisableGadget(1, #True)
; das ist unser update-prozess... wir werden
; ihn mal schön langsam machen, z. B. Internet-
; zugriff!
For z = 0 To Random(5)
AddElement(ll())
ll() = "Ne Zahl: " + Str(Random(100))
; jo! breeemmmsen:
Delay(100)
Next
; aaalso: Wir haben die Daten in ner LL und
; werden nun also das ListIconGadget updaten, bzw.
; hier nur weiter füllen ;)
LockMutex(LCAccess)
ForEach ll()
; wir Schauen, ob der Eintrag schon existiert,
; wenn nicht, dann hinzufügen :D
AddGadgetItem(2, -1, ll())
Next
; jou, fertisch :D
UnlockMutex(LCAccess)
; und den update-button wieder enablen:
DisableGadget(1, #False)
EndProcedure
CreateWindow()
Define.l Event
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case 1
; Update-Knopf gedrückt
; wir starten den Update-Thread!
CreateThread(@UpdateList(), 2)
Case 2
If EventType() = #PB_EventType_LeftClick
; ListIcon-Gadget will was, wir wollen
; also mal exklusiven Zugriff!
If TryLockMutex(LCAccess)
; wir dürfen das ListIcon bearbeiten!
AddGadgetItem(2, -1, "ich bin geadded!")
; wir sind Fertig :D
UnlockMutex(LCAccess)
EndIf
EndIf
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
kann, und diese in einem Thread laufen könnte. Du erstellst hier aber
5 Event-Schleifen.
Aber ich bin mir da leider auch nicht so sicher
