TThreadsafeTimer
Übersicht

![]() |
DAKBetreff: TThreadsafeTimer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da die Timer mit mehreren Threads scheinbar ihre liebe Not haben (seeeehr große prozessorauslastung) hab ich mal schnell eine thread-safe version geschrieben. Hoffe, das kann iwer brauchen.
Habs mal schnell noch gestresstestet: rennt auch mit 50 Threads mit je einem Timer ohne Probleme stabil. BlitzMax: [AUSKLAPPEN] Import BRL.Threads hier noch mal n kleiner testcode: BlitzMax: [AUSKLAPPEN]
viel spaß damit |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
- Zuletzt bearbeitet von DAK am Sa, Sep 05, 2009 13:37, insgesamt einmal bearbeitet
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du solltest dich lieber nochmal über Mutexes und deren funktionsweise und sinn informieren.
Davon abgesehen ist das Modul alles andere als Thread-Safe, vorallem schon, da es events benutzt. Und auch hier ist diese sehr seltsame While, TryLock, Wend schleife, da, welche die CPU auf 100% auslastung treibt, und noch dazu an einer sehr seltsamen stelle steht. |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
was hab ich an mutexes falsch verstanden?... mutexes sind im grunde binarys, die man entweder auf 0 oder 1 setzen kann, oder probieren kann, sie auf 0 zu setzen. wenn man probiert, und die sind schon auf 0, dann liefert das TryLockMutex False zurück... das wars doch, oder?
die events hab cih verwendet um die funktionsweise des originalen timers 1:1 zu imitieren. hast du ne idee, wie ich das machen könnt, ohne events da drin zu verwenden? warum sind events nicht thread-safe? was ich ausprobiert hab, hats ganz gut geklappt... die while, trylockmutex, wend - schleife is nur um den timer zu killen.. (das ganze hällt gerade mal einen Timertick lang... und eine 50stel sekunde die cpu auf 100% haben is zwar ned sauber, aber sauberer als der original-timer, der dauerhaft auf 100% is...) das könnt ich aber wohl auch durch n byte, was ich mit atomicadd/swap auf was anderes setz, machen... ich änder das mal... |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest auch einfach den Mutex direkt locken, dann warter er automatisch und ohne jegliche CPU-Auslatung, biser ihn locken kann, dafür sind mutexes nämlich gedacht.
Und es gibt keinen weg, die Events thread-safe zu bekommen, und somit auch keinen, den original timer zu imitieren. |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
das hätt so wie ich den mutex verwendet hab ned geklappt. der mutex wird nämlich vom timer-update schon gelockt, weil mutexe nicht nur ausgelesen werden können, sondern nur mit trylock ausgelesen werden können.. und dann is er schon gelockt... weißt, wie ich mein?
ich habs mal so gelöst: BlitzMax: [AUSKLAPPEN]
Is das praktikabel? |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group