Verfasst: 25.01.2007 14:44
Ich nicht, ich denke es wird schimmer seinKaeru Gaman hat geschrieben: aber was auch immer das ist, ich bezweifle einfach mal,
dass es eine ähnlichkeit mit dieser extremen versuchsanordnung hat.

Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Ich nicht, ich denke es wird schimmer seinKaeru Gaman hat geschrieben: aber was auch immer das ist, ich bezweifle einfach mal,
dass es eine ähnlichkeit mit dieser extremen versuchsanordnung hat.
Code: Alles auswählen
Global glob.l
Dim Threads.l(99)
#LastThread = 99
Procedure Thread(dummy.l)
Repeat
glob + 1
ForEver
EndProcedure
Debug "Label 1"
time = ElapsedMilliseconds()
For I = 0 To #LastThread
Debug "starting No. "+Str(I)
Threads(I) = CreateThread(@Thread(), 0)
Next
time = ElapsedMilliseconds() - time
Debug time
Debug "Label 2"
Delay(5000)
Debug "Label 3"
For I = 0 To #LastThread
KillThread(Threads(I))
Next
Debug "Label 4"
Debug glob
Code: Alles auswählen
mutex1 = CreateMutex()
mutex2 = CreateMutex()
Debug mutex1
Debug mutex2
Verinfacht gesagt stimmt das wohl so. Zwar muß ich testen, wie es dann mit dem Abfragen des Inhalt und dem damit verbundenen Timing aussieht, aber meine Frage Frage hast du richtig verstanden.soweit ich das verstanden habe,
geht es toshy um gemeinsamen zugriff auf eine global-steuerung von mehreren threads aus,
und das läuft bei mir problemlos.
*grins*Bei mir hängt sich das meist auf, und es sind nur 100 Threads, wie ich
Toshy einschätze möchte er mehr erstellen Satisfied Smile
Normal zwar nicht, aber bei einer Procedure hätte das sogar passieren können, nur habe ich das jetzt erstmal etwas umgeplant. z.B. bei der Verarbeitung von eingehenden Networkdaten die etwas zeitintensiver sind, hätte das vorkommen können. Aber das werde ich nun erst später wenn es notwendig wird einbauen.egal wie viele threads Toshy verwenden will,
er wird bestimmt nicht hunderte derselben einfachen endloszähler starten wollen.
NAtürlich gibt es mehrer, so wie bereits remi_meyer schrieb. Deshalb muß man auch dolle aufpassen, das man da die Struktur gut aufbaut, sonst hängt man selbst sein Programm unwiederbringlich auf. hehe. das macht so richtig Spaß so einen Mutexstrukturfehler zu finden.Das liest sich, als ob es mehrere Mutexe gibt, es gibt aber doch nur einen für alle Objekte, globalen Variablen usw.
Sonst müßte man ja bei der Erstellung des Mutex angeben, wofür er ist
Code: Alles auswählen
Label 1
starting No. 0
starting No. 1
starting No. 2
...
starting No. 99
1811250
Label 2
Label 3
Label 4
-1600444093
Code: Alles auswählen
Procedure Thread(dummy.l)
Repeat
glob + 1
Delay(0)
ForEver
EndProcedure
Code: Alles auswählen
Label 1
starting No. 0
starting No. 1
starting No. 2
...
starting No. 99
47
Label 2
Label 3
Label 4
8756447
Code: Alles auswählen
Procedure.l MutexCreate()
Protected *p = AllocateMemory(SizeOf(CRITICAL_SECTION))
If *p
InitializeCriticalSection_(*p)
EndIf
ProcedureReturn *p
EndProcedure
Procedure MutexFree(Mutex.l)
If Mutex
DeleteCriticalSection_(Mutex)
FreeMemory(Mutex)
EndIf
EndProcedure
Procedure MutexLock(Mutex.l)
EnterCriticalSection_(Mutex)
EndProcedure
Procedure.l MutexTryLock(Mutex.l)
ProcedureReturn TryEnterCriticalSection_(Mutex)
EndProcedure
Procedure MutexUnLock(Mutex.l)
LeaveCriticalSection_(Mutex)
EndProcedure