#pragma once // // UnlockedDelegate // class UnlockedDelegate : public Delegate { public: inline UnlockedDelegate () { } inline UnlockedDelegate (const char * DelegateID) : Delegate (DelegateID) { } inline virtual ~UnlockedDelegate () { } inline virtual void Invoke (const void * sender, DelegateArgs * arg) { int Size = GetSize (); if (Size == 0) return; DSingleLock Lock (& m_handlers.GetMutex (), true); if (Size <= DelegateMaxHandler) { DelegateHandler * arTemp [DelegateMaxHandler]; const Array & ar = m_handlers; int NbOfElem = ar.CopyTo (arTemp, DelegateMaxHandler); Lock.Unlock (); for (int Index=0; IndexInvoke (sender, arg); } catch (...) { #ifdef _DEBUG Beep (1000, 1000); OnDelegateInvokeFailed (h); #endif } } } else { FixArray arTemp (m_handlers.GetSize ()); const Array & ar = m_handlers; int NbOfElem = ar.CopyTo (arTemp); Lock.Unlock (); for (int Index=0; IndexInvoke (sender, arg); } catch (...) { #ifdef _DEBUG Beep (1000, 1000); OnDelegateInvokeFailed (h); #endif } } } } template void ForEach (pfnForEach pFunction) { int Size = GetSize (); if (Size == 0) return; DSingleLock Lock (& m_handlers.GetMutex (), true); m_ForEachBreak = false; if (Size <= DelegateMaxHandler) { DelegateHandler * arTemp [DelegateMaxHandler]; // int NbOfElem = m_handlers.CopyTo (arTemp, DelegateMaxHandler); const Array & ar = m_handlers; int NbOfElem = ar.CopyTo (arTemp, DelegateMaxHandler); Lock.Unlock (); for (int Index=0; Index arTemp (m_handlers.GetSize ()); // int NbOfElem = m_handlers.CopyTo (arTemp, DelegateMaxHandler); const Array & ar = m_handlers; int NbOfElem = ar.CopyTo (arTemp); Lock.Unlock (); for (int Index=0; Index void ForEach (pfnForEach pFunction, Parameter para) { int Size = GetSize (); if (Size == 0) return; DSingleLock Lock (& m_handlers.GetMutex (), true); m_ForEachBreak = false; if (Size <= DelegateMaxHandler) { DelegateHandler * arTemp [DelegateMaxHandler]; // int NbOfElem = m_handlers.CopyTo (arTemp, DelegateMaxHandler); const Array & ar = m_handlers; int NbOfElem = ar.CopyTo (arTemp, DelegateMaxHandler); Lock.Unlock (); for (int Index=0; Index arTemp (m_handlers.GetSize ()); // int NbOfElem = m_handlers.CopyTo (arTemp, DelegateMaxHandler); const Array & ar = m_handlers; int NbOfElem = ar.CopyTo (arTemp); Lock.Unlock (); for (int Index=0; Index void ForEach (pfnForEach pFunction, Delegate * SThis) { int Size = GetSize (); if (Size == 0) return; DSingleLock Lock (& m_handlers.GetMutex (), true); m_ForEachBreak = false; if (Size <= DelegateMaxHandler) { DelegateHandler * arTemp [DelegateMaxHandler]; // int NbOfElem = m_handlers.CopyTo (arTemp, DelegateMaxHandler); const Array & ar = m_handlers; int NbOfElem = ar.CopyTo (arTemp, DelegateMaxHandler); Lock.Unlock (); for (int Index=0; Index arTemp (m_handlers.GetSize ()); // int NbOfElem = m_handlers.CopyTo (arTemp, DelegateMaxHandler); const Array & ar = m_handlers; int NbOfElem = ar.CopyTo (arTemp); Lock.Unlock (); for (int Index=0; Index void ForEach (pfnForEach pFunction, Delegate * SThis, Parameter para) { int Size = GetSize (); if (Size == 0) return; DSingleLock Lock (& m_handlers.GetMutex (), true); m_ForEachBreak = false; if (Size <= DelegateMaxHandler) { DelegateHandler * arTemp [DelegateMaxHandler]; // int NbOfElem = m_handlers.CopyTo (arTemp, DelegateMaxHandler); const Array & ar = m_handlers; int NbOfElem = ar.CopyTo (arTemp, DelegateMaxHandler); Lock.Unlock (); for (int Index=0; Index arTemp (m_handlers.GetSize ()); // int NbOfElem = m_handlers.CopyTo (arTemp, DelegateMaxHandler); const Array & ar = m_handlers; int NbOfElem = ar.CopyTo (arTemp); Lock.Unlock (); for (int Index=0; Index