Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Im Moment knobel ich an einem Exception sicheren Lock
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
template<class T = CriticalSection> class scoped_lock { private: T& _obj; scoped_lock(const scoped_lock&); scoped_lock& operator =(const scoped_lock&); public: scoped_lock(T& obj) : _obj(obj) { _obj.acquire(); } ~scoped_lock() { _obj.release(); } }; // ... { scoped_lock<> lock(mutex); // ... } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
class CriticalSection : public Security::Lackable { private: CRITICAL_SECTION Crit; private: bool mode;public: explicit CriticalSection() { this->init(); } public: explicit CriticalSection(CRITICAL_SECTION §ion) { this->Crit = section;this->init(); } public: void init() { InitializeCriticalSection(&Crit); } public: ~CriticalSection() { this->unlock(); DeleteCriticalSection(&Crit); } public: virtual void lock() { EnterCriticalSection(&Crit); this->mode = true; } public: virtual void unlock() { LeaveCriticalSection(&Crit); this->mode = false; } public: bool locked() { return this->mode; } }; ........ { CriticalSection m; m.lock(); ... } ............ oder unter annahme einer weiteren Überladung { CriticalSection m(true); ... } |
Den Constructor hätte ich schnell um einen weiteren Überladen sodas ein Parameter angibt ob gleich gelockt werden soll. Dann wäre das Technisch doch das gleiche ? ...
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class CriticalSection { private: CriticalSection(const CriticalSection&); CriticalSection& operator =(const CriticalSection&); CRITICAL_SECTION s; public: CriticalSection() { InitializeCriticalSection(&s); } ~CriticalSection() { DeleteCriticalSection(&s); } void acquire() { EnterCriticalSection(&s); } void release() { LeaveCriticalSection(&s); } bool tryacquire() { TryEnterCriticalSection(&s); } }; |
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »dot« (10.09.2010, 10:46)
Ich habe in irgend einem Tutorial mal gesehn das wenn sich mehrere "Locks" eine CS teilen das sie den gleichen Bereich schützen. Also wenn die CS identisch ist kann ich mehrere Lock-Objekte instanzieren die das gleiche schützen ... Unterliege ich da einem Fehler ?
Werbeanzeige