void ScRefreshTimerControl::SetAllowRefresh( bool b )
{ if ( b && nBlockRefresh )
--nBlockRefresh; elseif ( !b && nBlockRefresh < sal_uInt16(~0) )
++nBlockRefresh;
}
ScRefreshTimerProtector::ScRefreshTimerProtector( std::unique_ptr<ScRefreshTimerControl> const & rp )
:
m_rpControl( rp )
{ if ( m_rpControl )
{
m_rpControl->SetAllowRefresh( false ); // wait for any running refresh in another thread to finish
std::scoped_lock aGuard( m_rpControl->GetMutex() );
}
}
ScRefreshTimerProtector::~ScRefreshTimerProtector()
{ if ( m_rpControl )
m_rpControl->SetAllowRefresh( true );
}
void ScRefreshTimer::Invoke()
{ if ( ppControl && *ppControl && (*ppControl)->IsRefreshAllowed() )
{ // now we COULD make the call in another thread ...
std::scoped_lock aGuard( (*ppControl)->GetMutex() );
Timer::Invoke(); // restart from now on, don't execute immediately again if timed out // a second time during refresh if ( IsActive() )
Launch();
}
}
void ScRefreshTimer::Launch()
{ if ( GetTimeout() )
AutoTimer::Start();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.