Wie sieht denn deine Procdure aus? Hat es denn ein Parameter?
Hier mal ein Beispiel wie es gehen kann.
Beispiel mal mit Strukturen geändert
Code: Alles auswählen
;- Konstanten
Enumeration ; Window ID
#Window
EndEnumeration
Enumeration ; Menu ID
#Menu
EndEnumeration
Enumeration ; MenuItem ID
#Menu_Exit
EndEnumeration
Enumeration ; Statusbar ID
#Statusbar
EndEnumeration
Enumeration ; Gadget ID
#List
EndEnumeration
; ***************************************************************************************
Procedure UpdateWindow()
Protected x,y,dx,dy
Protected mn,st,tb
x = 0
y = 0
mn = MenuHeight()
st = StatusBarHeight(#StatusBar)
;tb = ToolBarHeight(#ToolBar)
dx = WindowWidth(#Window)
dy = WindowHeight(#Window) - mn - st - tb
ResizeGadget(#List, x, y, dx, dy)
EndProcedure
Procedure WriteLog(Info.s)
Protected temp.s
temp = FormatDate("%YYYY.%MM.%DD %HH:%II:%SS - ", Date()) + Info
AddGadgetItem(#List, -1, temp)
If CountGadgetItems(#List) > 500
RemoveGadgetItem(#List, 0)
EndIf
EndProcedure
;- Globale Variablen
Global exit = 0
Structure udtThread
gadget.i
count.i
info.s
EndStructure
Global mutex
Global Thread1.udtThread
Global Thread2.udtThread
Declare MyThread(*this.udtThread)
;- Fenster
style = #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget
If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 400, 300, "Fenster", style)
; Menu
If CreateMenu(#Menu, WindowID(#Window))
MenuTitle("&Datei")
MenuItem(#Menu_Exit, "Be&enden")
EndIf
; Statusbar
CreateStatusBar(#Statusbar, WindowID(#Window))
; Gadgets
If CreateGadgetList(WindowID(#Window))
ListViewGadget(#List, 0,0,0,0)
EndIf
; Mutex erstellen - Spart man Threadsafe
mutex = CreateMutex()
;- Start Thread
With Thread1
\gadget = #List
\count = 10
\info = "Thread 1"
EndWith
With Thread2
\gadget = #List
\count = 15
\info = "Thread 2"
EndWith
hThread1 = CreateThread(@MyThread(), Thread1)
hThread2 = CreateThread(@MyThread(), Thread2)
;-- Hauptschleife
Repeat
event = WaitWindowEvent()
window = EventWindow()
menu = EventMenu()
type = EventType()
Select event
Case #PB_Event_Menu
Select menu
Case #Menu_Exit
Exit = 1
EndSelect
Case #PB_Event_Gadget
Case #PB_Event_CloseWindow
Exit = 1
Case #PB_Event_Repaint
Case #PB_Event_SizeWindow
UpdateWindow()
Case #PB_Event_MoveWindow
Case #PB_Event_ActivateWindow
Case #PB_Event_SysTray
EndSelect
Until Exit
EndIf
; ***************************************************************************************
Procedure MyThread(*this.udtThread)
Protected temp.s
If IsGadget(*this\gadget) = 0
; fehler
ProcedureReturn 0
EndIf
LockMutex(mutex)
temp = *this\info + ": Start..."
AddGadgetItem(*this\gadget, -1, temp)
UnlockMutex(mutex)
For i = 1 To *this\count
LockMutex(mutex)
temp = *this\info + ": Count " + Str(i)
AddGadgetItem(*this\gadget, -1, temp)
UnlockMutex(mutex)
Delay(1000)
Next
LockMutex(mutex)
temp = *this\info + ": Ready."
AddGadgetItem(*this\gadget, -1, temp)
UnlockMutex(mutex)
EndProcedure