Этот небольшой полезный шаблонный хелпер позволяет автоматически запрещать и разрешать обновления компонентов, используя RAII идиому. Освобождение залоченного объекта произойдет даже при возникновении исключительной ситуации.
/// Templated update locker utility class
template <typename T>
class EsUpdateLocker
{
public:
inline EsUpdateLocker( T* obj ) :
m_obj(obj)
{
if( m_obj )
m_obj->BeginUpdate();
}
void inline release()
{
if( m_obj )
{
m_obj->EndUpdate();
m_obj = 0;
}
}
inline ~EsUpdateLocker()
{
release();
}
private:
T* m_obj;
EsUpdateLocker();
EsUpdateLocker( const EsUpdateLocker& );
EsUpdateLocker& operator=( const EsUpdateLocker& );
};
Использование:
void doSomething(TListBox* lbx)
{
EsUpdateLocker<TListBox> lock(lbx);
// do something with list box items
// ...
}