summaryrefslogtreecommitdiff
path: root/tasks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tasks.cpp')
-rw-r--r--tasks.cpp39
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