diff options
Diffstat (limited to 'tasks.cpp')
-rw-r--r-- | tasks.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/tasks.cpp b/tasks.cpp new file mode 100644 index 0000000..63a3358 --- /dev/null +++ b/tasks.cpp @@ -0,0 +1,39 @@ +#include <vdr/channels.h> +#include "tasks.h" + +namespace vdrlive { + +TaskManager::TaskManager(): + m_switchChannel( 0 ), + m_switchResult( false ) +{ +} + +bool TaskManager::SwitchChannel( int number ) +{ + cMutexLock lock( this ); + m_switchChannel = number; + m_scheduleWait.Wait( *this ); + return m_switchResult; +} + +void TaskManager::DoScheduledWork() +{ + if ( m_switchChannel == 0 ) + return; + + cMutexLock lock( this ); + if ( m_switchChannel != 0 ) { + m_switchResult = Channels.SwitchTo( m_switchChannel ); + m_switchChannel = 0; + m_scheduleWait.Broadcast(); + } +} + +TaskManager& LiveTaskManager() +{ + static TaskManager instance; + return instance; +} + +} // namespace vdrlive |