Fragen und Bugreports zur PureBasic 4.0-Beta.
BahnFahrerDeluxe
Beiträge: 26 Registriert: 17.11.2005 11:05
Beitrag
von BahnFahrerDeluxe » 06.02.2006 14:17
ich habe mal einen kleinen Test mit Threads und dem Zugriff aufs Strings via Mutex gemacht, scheint zu funktionieren.
Hier ist der Test:
Code: Alles auswählen
Global MyMutex.l
Global DerString.s
Procedure MyThread1(x)
Repeat
LockMutex(MyMutex)
If DerString = "Thread 4"
DerString = "Thread 1"
Debug DerString
EndIf
UnlockMutex(MyMutex)
Delay(10)
ForEver
EndProcedure
Procedure MyThread2(x)
Repeat
LockMutex(MyMutex)
If DerString = "Thread 1"
DerString = "Thread 2"
Debug DerString
EndIf
UnlockMutex(MyMutex)
Delay(10)
ForEver
EndProcedure
Procedure MyThread3(x)
Repeat
LockMutex(MyMutex)
If DerString = "Thread 2"
DerString = "Thread 3"
Debug DerString
EndIf
UnlockMutex(MyMutex)
Delay(10)
ForEver
EndProcedure
Procedure MyThread4(x)
Repeat
LockMutex(MyMutex)
If DerString = "Thread 3"
DerString = "Thread 4"
Debug DerString
Debug "-------"
EndIf
UnlockMutex(MyMutex)
Delay(10)
ForEver
EndProcedure
MyMutex = CreateMutex()
If MyMutex
DerString = "Thread 1"
Debug DerString
CreateThread(@MyThread1(), 1)
CreateThread(@MyThread2(), 1)
CreateThread(@MyThread3(), 1)
CreateThread(@MyThread4(), 1)
Repeat
Delay(100)
ForEver
EndIf
Achtung - bitte mit dem Debugger laufen lassen, Programm läuft in einer Endlosschleife, via Debugger Programm beenden!!
cya
Euer BahnFahrer
MLK
Beiträge: 267 Registriert: 01.11.2004 13:17
Wohnort: Hamburg
Beitrag
von MLK » 06.02.2006 14:39
schickes beispiel!
hoffe mal solche codes werden gerettet bevor dieses temporäre-forum gelöscht wird.
freedimension
Admin
Beiträge: 1987 Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:
Beitrag
von freedimension » 06.02.2006 15:39
MLK hat geschrieben: schickes beispiel!
hoffe mal solche codes werden gerettet bevor dieses temporäre-forum gelöscht wird.
Ich markiere Posts die später nicht gelöscht werden sollen mit einem "[!]" im Titel.
Betonung liegt auf
Ich *
*
Die anderen Moderatoren dürfen natürlich auch mal ran
Beginne jeden Tag als ob es Absicht wäre!
BILDblog
Andre
PureBasic Team
Beiträge: 1754 Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8 Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:
Beitrag
von Andre » 07.02.2006 00:06
MLK hat geschrieben: hoffe mal solche codes werden gerettet bevor dieses temporäre-forum gelöscht wird.
Naja - und ich versuche ja auch fürs CodeArchiv mitzuspeichern...
(Öfters aber auch erstmal "nur" die Links, also bitte wirklich nicht wahllos Threads löschen.)
BahnFahrerDeluxe
Beiträge: 26 Registriert: 17.11.2005 11:05
Beitrag
von BahnFahrerDeluxe » 07.02.2006 16:10
Ich habe mal den Thread-Mutex-Test erweitert und den Code kompakter geschrieben. Der Test soll einfach die Robustheit dieser neuen Funktionen zeigen. Es darf immer nur ein Thread die String-Variable "ThreadString" bearbeiten und verändern, und nur dann wenn er an der Reihe ist. Versucht mal wieviele Threads euer System verträgt. Ihr könnt einfach die Konstante #MAX_THREADS auf einen höheren Wert setzten. Kann kein weiterer Thread mehr erzeugt werden, wird im Debugger eine Fehlermeldung geworfen.
Hier ist der Code:
Code: Alles auswählen
#MAX_THREADS = 100
#MAX_RANDOM = 500
Global MyMutex.l
Global ThreadString.s
Procedure MyThread(x)
Repeat
LockMutex(MyMutex)
If ThreadString = "Thread " + Str(#MAX_THREADS)
ThreadString = "Thread 1"
Debug "----------"
Debug ThreadString
ElseIf ThreadString = "Thread " + Str(x)
ThreadString = "Thread " + Str(x + 1)
Debug ThreadString
EndIf
UnlockMutex(MyMutex)
Delay(Random(#MAX_RANDOM))
ForEver
EndProcedure
MyMutex = CreateMutex()
If MyMutex
ThreadString = "Thread " + Str(#MAX_THREADS)
For i = 1 To #MAX_THREADS
If Not CreateThread(@MyThread(), i)
Debug "Thread Nr. " + Str(i) + " konnte nicht erzeugt werden!"
End
EndIf
Next i
Repeat
Delay(100)
ForEver
EndIf
cya
Euer BahnFahrer