MythTV master
taskqueue.h
Go to the documentation of this file.
1
2// Program Name: taskqueue.h
3// Created : Oct. 24, 2005
4//
5// Purpose : Used to process delayed tasks
6//
7// Copyright (c) 2005 David Blain <dblain@mythtv.org>
8//
9// Licensed under the GPL v2 or later, see LICENSE for details
10//
12
13#ifndef TASKQUEUE_H
14#define TASKQUEUE_H
15
16// C++ headers
17#include <chrono>
18#include <map>
19
20// Qt headers
21#include <QMutex>
22#include <QString>
23
24// MythTV headers
25#include "libmythbase/mthread.h"
27
28#include "upnpexp.h"
29
30class Task;
31class TaskQueue;
32
34// Typedefs
36
37using TaskMap = std::multimap<std::chrono::microseconds, Task *>;
38
41//
42// Task Class Definition
43//
46
47class Task : public ReferenceCounter
48{
49 protected:
50 static long m_nTaskCount;
51
53
54 protected:
55
56 // Destructor protected to force use of Release Method
57 ~Task() override = default;
58
59 public:
60
61 explicit Task(const QString &debugName);
62
63 long Id() const { return( m_nTaskId ); }
64
65 virtual void Execute( TaskQueue *pQueue ) = 0;
66 virtual QString Name () = 0;
67
68};
69
70
72// TaskQueue Singleton
74
76{
77 private:
78
79 // Singleton instance used by all.
81
82 protected:
83
85 QMutex m_mutex;
86 bool m_bTermRequested {false};
87
88 protected:
89
91
92 void run() override; // MThread
93
94 private:
95
96 // ------------------------------------------------------------------
97 // Private so the singleton pattern can be inforced.
98 // ------------------------------------------------------------------
99
100 TaskQueue();
101
102 public:
103
104 static TaskQueue* Instance();
105 static void Shutdown();
106
107 ~TaskQueue() override;
108
109 void RequestTerminate ( );
110
111 void Clear ( );
112 void AddTask ( std::chrono::milliseconds msec , Task *pTask );
113 void AddTask ( Task *pTask );
114
115 Task *GetNextExpiredTask ( std::chrono::microseconds tt, std::chrono::milliseconds nWithinMilliSecs = 50ms );
116
117 private:
118 void AddTaskAbsolute ( std::chrono::microseconds tt, Task *pTask );
119};
120
121#endif // TASKQUEUE_H
#define Clear(a)
This is a wrapper around QThread that does several additional things.
Definition: mthread.h:49
virtual void run(void)
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
Definition: mthread.cpp:315
General purpose reference counter.
TaskMap m_mapTasks
Definition: taskqueue.h:84
QMutex m_mutex
Definition: taskqueue.h:85
static TaskQueue * g_pTaskQueue
Definition: taskqueue.h:80
bool IsTermRequested()
Definition: taskqueue.h:48
virtual QString Name()=0
static long m_nTaskCount
Definition: taskqueue.h:50
long m_nTaskId
Definition: taskqueue.h:52
virtual void Execute(TaskQueue *pQueue)=0
~Task() override=default
long Id() const
Definition: taskqueue.h:63
Task(const QString &debugName)
Definition: taskqueue.cpp:37
std::multimap< std::chrono::microseconds, Task * > TaskMap
Definition: taskqueue.h:37
#define UPNP_PUBLIC
Definition: upnpexp.h:9