Ohne große Englischkenntnisse ist das zwar schwer zu verstehen, aber ich beiße mich durch. Macht trotzdem Spaß. Ich wollte jetzt mal die Mutex testen, bin aber schon an anderem gescheiter.
Zwar habe ich mitbekommen, da alles erstmal lokal ist (auch arrays) und erst auf global gesetzt werden muß. aber wie läuft das nun?
Ich dachte, sobald ich im "Haupcode" eine variable auf global setzte ich sie überall bekannt, aber das stimmt wohl nur begrenzt.
In Proceduren ist sie bekannt in Proceduren die als Thread ausgeführt werden nicht (jaPBe ohne "Threadsafe genutzt).
Dort geht es erst, wenn ich die Variable mit shared nutze und zwar MIT Variablenbezeichener.
Code: Alles auswählen
Procedure thread()
; ohne shared wird s nicht angezeigt
;Shared s hier auch nicht, gibt nen fehler
;Shared s.s, hier klappt es wohl
Debug s
While 1
Delay(1)
Wend
EndProcedure
ThreadID1 = CreateThread(@thread(),1)
Global s.s
s = "test"
While 1
Delay(1)
Wend
Ich habe das jetzt durch viel testen hinbekommen, da ich wohl was nicht verstanden habe.
Ist dieses Verhalten aber nun Absicht oder ist dies ein fehler?
Global wird in bezug auf die Nutzung bei Thread dann wohl sinnlos, denn man muß shared nehmen und wenn man "global" wegläßt, geht es auch.
[edit] Ach ja, muß ich dann bei jedem Thread für die selbe Variable immer wieder shared nehmen oder nur bei einem bzw. gibt es probleme wenn ich das bei mehr als einem nehme?
Gilt "shared" dann nur für den Thread oder für die eine Procedure (habe damit noch nicht gearbeitet), muß ich also ab pb4 statt einmal "global" zu nehmen für jede Procedure "shared" anlegen?
Gruß
Toshy