thread problem...
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: thread problem...
Deine Thread-Procedure muss einen Parameter vom Typ Integer haben, auch wenn du ihn nicht verwendest.
Re: thread problem...
Dank für die Antworten.
Leider besteht mein Probelm immernoch.
Ich hab die 800 Zeilen jetzt mal auf 80 zusammengeschrumpft. Der Code kann jetzt nichts mehr außer den IMA zu erzeugen - aber darin ist er richtig gut.
hier ist er:
hat jemand ne idee, was der unterschied zu dem ist, was ich gestern gepostet hab?
Ist doch genau das gleiche Prinzip! Oder hab ich da was übersehen? So langsam beginne ich Threads zu hassen...
Leider besteht mein Probelm immernoch.

Ich hab die 800 Zeilen jetzt mal auf 80 zusammengeschrumpft. Der Code kann jetzt nichts mehr außer den IMA zu erzeugen - aber darin ist er richtig gut.
hier ist er:
Code: Alles auswählen
;-inital Vars
;window and resolution
width=512
height=512
; colonie
numberOfColonies=1
; ------------------------------------------------------------------------------
;-structs
Structure pheromonMap
Array strength.f(2)
EndStructure
Structure colony
Array pheromonMap.pheromonMap(0) ;array, that contains pointer to the pheromon List
pheroMapMutex.i
EndStructure
Global Dim colony.colony(numberOfColonies-1)
For i=0 To numberofColonies-1
Dim colony(i)\pheromonMap(width*height-1)
colony(i)\pheroMapMutex=CreateMutex()
Next
Global all.i=CreateMutex()
Procedure refreshPheromonMap(dummy)
width=512
height=512
resizedWidth=129
Dim pheroMapTmp.pheromonMap(width*height-1)
Repeat
LockMutex(all)
; LockMutex(colony(0)\pheroMapMutex) ;unnötig
Swap colony(0)\pheromonMap(), pheroMapTmp()
; UnlockMutex(colony(0)\pheroMapMutex)
UnlockMutex(all)
Delay(100)
ForEver
EndProcedure
;-test
InitSprite()
OpenWindow(0,200,200,width,height,"AntWar",#PB_Window_MinimizeGadget)
OpenWindowedScreen(WindowID(0),0,0,width,height,0,0,0)
t2=CreateThread(@refreshPheromonMap(),0)
Repeat
Repeat ;some window stuff...
event=WindowEvent()
If Event = #PB_Event_CloseWindow
End
EndIf
Until Event = 0
StartDrawing(ScreenOutput())
Box(0,0,width-1,width-1)
LockMutex(all)
For colony=0 To numberOfColonies-1
; LockMutex(colony(0)\pheroMapMutex);unnötig...
asdf=colony(0)\pheromonMap(0)\strength(0);read error at adress 4294967288
; UnlockMutex(colony(0)\pheroMapMutex)
Next
UnlockMutex(all)
StopDrawing()
FlipBuffers()
Delay(1)
ForEver
End
Ist doch genau das gleiche Prinzip! Oder hab ich da was übersehen? So langsam beginne ich Threads zu hassen...
Re: thread problem...
also dieser IMA hat nichts mit dem Thread zu tun, sonden mit dem "hinundher geschiebe" der Arrays an sich.
Schreibt man den Code so um, das er ohne Threads läuft,kommen auch IMAs
Ich vermute es liegt an den Structure-Arrays die du mit den normanen vertauschst ...
Ich versehe allerdings nicht wieso du überhaupt Array in der Struktur nutzt, bei diesem Code reicht die klassische Forum mit statischen Array doch auch ?
Die sache mit Arrays in Structuren (also mit dem schlüsselwort Array) ist ja noch sehr neu, ich weiß nicht genau ob sachen wie Swap damit überhaupt schon funktionieren, vorallem weil ja interne Array mit geswapt werden müssten ...
Fest steht das es nicht mit Threads zu tun hat ! denn hier kommt der gleiche Fehler:
Man müsste das mal etwas genauer betrachten, um den Fehler zu finden ...
Schreibt man den Code so um, das er ohne Threads läuft,kommen auch IMAs
Ich vermute es liegt an den Structure-Arrays die du mit den normanen vertauschst ...
Ich versehe allerdings nicht wieso du überhaupt Array in der Struktur nutzt, bei diesem Code reicht die klassische Forum mit statischen Array doch auch ?
Die sache mit Arrays in Structuren (also mit dem schlüsselwort Array) ist ja noch sehr neu, ich weiß nicht genau ob sachen wie Swap damit überhaupt schon funktionieren, vorallem weil ja interne Array mit geswapt werden müssten ...
Fest steht das es nicht mit Threads zu tun hat ! denn hier kommt der gleiche Fehler:
Code: Alles auswählen
;-inital Vars
;window and resolution
width=512
height=512
; colonie
numberOfColonies=1
; ------------------------------------------------------------------------------
;-structs
Structure pheromonMap
Array strength.f(2)
EndStructure
Structure colony
Array pheromonMap.pheromonMap(0) ;array, that contains pointer to the pheromon List
pheroMapMutex.i
EndStructure
Global Dim colony.colony(numberOfColonies-1)
For i=0 To numberofColonies-1
Dim colony(i)\pheromonMap(width*height-1)
; colony(i)\pheroMapMutex=CreateMutex()
Next
;Global all.i=CreateMutex()
Procedure refreshPheromonMap(dummy)
width=512
height=512
resizedWidth=129
Dim pheroMapTmp.pheromonMap(width*height-1)
; Repeat
; LockMutex(all)
; LockMutex(colony(0)\pheroMapMutex) ;unnötig
Swap colony(0)\pheromonMap(), pheroMapTmp()
; UnlockMutex(colony(0)\pheroMapMutex)
; UnlockMutex(all)
; Delay(100)
; ForEver
EndProcedure
;-test
InitSprite()
OpenWindow(0,200,200,width,height,"AntWar",#PB_Window_MinimizeGadget)
OpenWindowedScreen(WindowID(0),0,0,width,height,0,0,0)
;t2=CreateThread(@refreshPheromonMap(),0)
Repeat
Repeat ;some window stuff...
event=WindowEvent()
If Event = #PB_Event_CloseWindow
End
EndIf
Until Event = 0
StartDrawing(ScreenOutput())
Box(0,0,width-1,width-1)
refreshPheromonMap(dummy) ; << eingefühgt !
; LockMutex(all)
For colony=0 To numberOfColonies-1
; LockMutex(colony(0)\pheroMapMutex);unnötig...
asdf=colony(0)\pheromonMap(0)\strength(0);read error at adress 4294967288
; UnlockMutex(colony(0)\pheroMapMutex)
Next
; UnlockMutex(all)
StopDrawing()
FlipBuffers()
Delay(1)
ForEver
End
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: thread problem...
Im "richtigen" Programm gehts nicht anders - oder nur sehr umständlich.STARGÅTE hat geschrieben:Ich versehe allerdings nicht wieso du überhaupt Array in der Struktur nutzt, bei diesem Code reicht die klassische Forum mit statischen Array doch auch ?
Hast recht gehabt. Wenn ich statt dem nicht-structure-Array ein Array der selben structure nehme, dann gehts tadellos. Ist das so gewollt? oder ein Bug?STARGÅTE hat geschrieben:Ich vermute es liegt an den Structure-Arrays die du mit den normanen vertauschst ...
PS: einen *amKopfKratzSimly* wäre echt cool. Ich hätte ihn schon oft gebrauchen können

Re: thread problem...
Wenns so gewollt ist, dann würde zumindest die Compilerfehlermeldung fehlen.teamO hat geschrieben: Hast recht gehabt. Wenn ich statt dem nicht-structure-Array ein Array der selben structure nehme, dann gehts tadellos. Ist das so gewollt? oder ein Bug?
Am besten mal hier in englisch melden.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

Re: thread problem...
sowas hier:PS: einen *amKopfKratzSimly* wäre echt cool. Ich hätte ihn schon oft gebrauchen können

Zuletzt geändert von STARGÅTE am 09.07.2010 17:28, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: thread problem...
Genau! Aber bei mir gibts den nicht
. Den hast du über [img ] eingebunden, oder?

Re: thread problem...
noch eine letzte (hoffentlich...) Frage zum Thema Threads:
In meinem Programm laufen jetzt zwei Threads parallel. Im Taskmanager werden aber 4 angezeigt. Debugger ist aus. Hat jemand ne idee, an was das liegt?
In meinem Programm laufen jetzt zwei Threads parallel. Im Taskmanager werden aber 4 angezeigt. Debugger ist aus. Hat jemand ne idee, an was das liegt?
Re: thread problem...
naja ein Thread läuft ja eh immer, nämlcih das eigentliche Programm selber das wird ja mit gezählt.
und wnmn ich dann sowas heir starte:
werden genau 3 Threads angezeigt, also alles richtig.
und wnmn ich dann sowas heir starte:
Code: Alles auswählen
Procedure test(z)
Repeat
Delay(10)
ForEver
EndProcedure
CreateThread(@test(), 2)
CreateThread(@test(), 2)
Repeat
Delay(10)
ForEver
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr