MythTV  master
mconcurrent.h
Go to the documentation of this file.
1 #ifndef MCONCURRENT_H
2 #define MCONCURRENT_H
3 
6 
7 
28 namespace MConcurrent {
29 
30 class RunFunctionTask : public QRunnable
31 {
32 public:
33  void start(const QString &name)
34  {
35  MThreadPool::globalInstance()->start(this, name, /*m_priority*/ 0);
36  }
37 
38  virtual void runFunctor() = 0;
39 
40  void run() override
41  {
42  try
43  {
44  this->runFunctor();
45  }
46  catch (...)
47  {
48  LOG(VB_GENERAL, LOG_ERR, "An exception occurred");
49  }
50  }
51 };
52 
53 template <typename Class>
55 {
56 public:
57  VoidStoredMemberFunctionPointerCall0(void (Class::*fn)() , Class *object)
58  : m_fn(fn), m_object(object) { }
59 
60  void runFunctor() override { (m_object->*m_fn)(); }
61 private:
62  void (Class::*m_fn)();
63  Class *m_object;
64 };
65 
66 template <typename Class, typename Param1, typename Arg1>
68 {
69 public:
70  VoidStoredMemberFunctionPointerCall1(void (Class::*fn)(Param1) , Class *object, const Arg1 &arg1)
71  : m_fn(fn), m_object(object), m_arg1(arg1){ }
72 
73  void runFunctor() override { (m_object->*m_fn)(m_arg1); }
74 private:
75  void (Class::*m_fn)(Param1);
76  Class *m_object;
77  Arg1 m_arg1;
78 };
79 
80 template <typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
82 {
83 public:
84  VoidStoredMemberFunctionPointerCall2(void (Class::*fn)(Param1, Param2) , Class *object, const Arg1 &arg1, const Arg2 &arg2)
85  : m_fn(fn), m_object(object), m_arg1(arg1), m_arg2(arg2){ }
86 
87  void runFunctor() override { (m_object->*m_fn)(m_arg1, m_arg2); }
88 private:
89  void (Class::*m_fn)(Param1, Param2);
90  Class *m_object;
91  Arg1 m_arg1; Arg2 m_arg2;
92 };
93 
94 template <typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
96 {
97 public:
98  VoidStoredMemberFunctionPointerCall3(void (Class::*fn)(Param1, Param2, Param3) , Class *object, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
99  : m_fn(fn), m_object(object), m_arg1(arg1), m_arg2(arg2), m_arg3(arg3){ }
100 
101  void runFunctor() override { (m_object->*m_fn)(m_arg1, m_arg2, m_arg3); }
102 private:
103  void (Class::*m_fn)(Param1, Param2, Param3);
104  Class *m_object;
105  Arg1 m_arg1; Arg2 m_arg2; Arg3 m_arg3;
106 };
107 
108 template <typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
110 {
111 public:
112  VoidStoredMemberFunctionPointerCall4(void (Class::*fn)(Param1, Param2, Param3, Param4) , Class *object, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
113  : m_fn(fn), m_object(object), m_arg1(arg1), m_arg2(arg2), m_arg3(arg3), m_arg4(arg4){ }
114 
115  void runFunctor() override { (m_object->*m_fn)(m_arg1, m_arg2, m_arg3, m_arg4); }
116 private:
117  void (Class::*m_fn)(Param1, Param2, Param3, Param4);
118  Class *m_object;
119  Arg1 m_arg1; Arg2 m_arg2; Arg3 m_arg3; Arg4 m_arg4;
120 };
121 
122 template <typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
124 {
125 public:
126  VoidStoredMemberFunctionPointerCall5(void (Class::*fn)(Param1, Param2, Param3, Param4, Param5) , Class *object, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
127  : m_fn(fn), m_object(object), m_arg1(arg1), m_arg2(arg2), m_arg3(arg3), m_arg4(arg4), m_arg5(arg5){ }
128 
129  void runFunctor() override { (m_object->*m_fn)(m_arg1, m_arg2, m_arg3, m_arg4, m_arg5); }
130 private:
131  void (Class::*m_fn)(Param1, Param2, Param3, Param4, Param5);
132  Class *m_object;
133  Arg1 m_arg1; Arg2 m_arg2; Arg3 m_arg3; Arg4 m_arg4; Arg5 m_arg5;
134 };
135 
136 template <typename Class>
137 void run(const QString &name, Class *object, void (Class::*fn)())
138 {
139  (new VoidStoredMemberFunctionPointerCall0<Class>(fn, object))->start(name);
140 }
141 
142 template <typename Class, typename Param1, typename Arg1>
143 void run(const QString &name, Class *object, void (Class::*fn)(Param1), const Arg1 &arg1)
144 {
145  (new VoidStoredMemberFunctionPointerCall1<Class, Param1, Arg1>(fn, object, arg1))->start(name);
146 }
147 
148 template <typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2>
149 void run(const QString &name, Class *object, void (Class::*fn)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2)
150 {
151  (new VoidStoredMemberFunctionPointerCall2<Class, Param1, Arg1, Param2, Arg2>(fn, object, arg1, arg2))->start(name);
152 }
153 
154 template <typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3>
155 void run(const QString &name, Class *object, void (Class::*fn)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
156 {
157  (new VoidStoredMemberFunctionPointerCall3<Class, Param1, Arg1, Param2, Arg2, Param3, Arg3>(fn, object, arg1, arg2, arg3))->start(name);
158 }
159 
160 template <typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4>
161 void run(const QString &name, Class *object, void (Class::*fn)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
162 {
164 }
165 
166 template <typename Class, typename Param1, typename Arg1, typename Param2, typename Arg2, typename Param3, typename Arg3, typename Param4, typename Arg4, typename Param5, typename Arg5>
167 void run(const QString &name, Class *object, void (Class::*fn)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg4 &arg5)
168 {
170 }
171 
172 
173 } //namespace QtConcurrent
174 
175 #endif // MCONCURRENT_H
MConcurrent::RunFunctionTask
Definition: mconcurrent.h:30
MConcurrent::VoidStoredMemberFunctionPointerCall4::m_arg4
Arg4 m_arg4
Definition: mconcurrent.h:119
MConcurrent::RunFunctionTask::run
void run() override
Definition: mconcurrent.h:40
MConcurrent::VoidStoredMemberFunctionPointerCall5::m_object
Class * m_object
Definition: mconcurrent.h:132
MConcurrent::VoidStoredMemberFunctionPointerCall3::VoidStoredMemberFunctionPointerCall3
VoidStoredMemberFunctionPointerCall3(void(Class::*fn)(Param1, Param2, Param3), Class *object, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3)
Definition: mconcurrent.h:98
MConcurrent::VoidStoredMemberFunctionPointerCall0::runFunctor
void runFunctor() override
Definition: mconcurrent.h:60
MConcurrent
Provides a simple version of QtConcurrent::run() that uses MThreadPool rather than QThreadPool.
Definition: mconcurrent.h:28
MConcurrent::VoidStoredMemberFunctionPointerCall0
Definition: mconcurrent.h:54
MConcurrent::RunFunctionTask::start
void start(const QString &name)
Definition: mconcurrent.h:33
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
MConcurrent::VoidStoredMemberFunctionPointerCall5
Definition: mconcurrent.h:123
MConcurrent::VoidStoredMemberFunctionPointerCall5::m_fn
void(Class::* m_fn)(Param1, Param2, Param3, Param4, Param5)
Definition: mconcurrent.h:131
MConcurrent::VoidStoredMemberFunctionPointerCall0::m_object
Class * m_object
Definition: mconcurrent.h:63
MConcurrent::VoidStoredMemberFunctionPointerCall5::m_arg2
Arg2 m_arg2
Definition: mconcurrent.h:133
MConcurrent::VoidStoredMemberFunctionPointerCall4::m_fn
void(Class::* m_fn)(Param1, Param2, Param3, Param4)
Definition: mconcurrent.h:117
MConcurrent::VoidStoredMemberFunctionPointerCall3::m_arg1
Arg1 m_arg1
Definition: mconcurrent.h:105
mythlogging.h
MConcurrent::VoidStoredMemberFunctionPointerCall5::m_arg5
Arg5 m_arg5
Definition: mconcurrent.h:133
MConcurrent::VoidStoredMemberFunctionPointerCall4::VoidStoredMemberFunctionPointerCall4
VoidStoredMemberFunctionPointerCall4(void(Class::*fn)(Param1, Param2, Param3, Param4), Class *object, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4)
Definition: mconcurrent.h:112
MConcurrent::VoidStoredMemberFunctionPointerCall4::m_object
Class * m_object
Definition: mconcurrent.h:118
MConcurrent::VoidStoredMemberFunctionPointerCall2::runFunctor
void runFunctor() override
Definition: mconcurrent.h:87
MConcurrent::VoidStoredMemberFunctionPointerCall3::m_object
Class * m_object
Definition: mconcurrent.h:104
MConcurrent::VoidStoredMemberFunctionPointerCall2::m_arg2
Arg2 m_arg2
Definition: mconcurrent.h:91
MConcurrent::VoidStoredMemberFunctionPointerCall3::m_arg2
Arg2 m_arg2
Definition: mconcurrent.h:105
MConcurrent::VoidStoredMemberFunctionPointerCall5::m_arg3
Arg3 m_arg3
Definition: mconcurrent.h:133
MConcurrent::run
void run(const QString &name, Class *object, void(Class::*fn)())
Definition: mconcurrent.h:137
MConcurrent::VoidStoredMemberFunctionPointerCall5::VoidStoredMemberFunctionPointerCall5
VoidStoredMemberFunctionPointerCall5(void(Class::*fn)(Param1, Param2, Param3, Param4, Param5), Class *object, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5)
Definition: mconcurrent.h:126
MConcurrent::VoidStoredMemberFunctionPointerCall5::runFunctor
void runFunctor() override
Definition: mconcurrent.h:129
MConcurrent::VoidStoredMemberFunctionPointerCall2::m_arg1
Arg1 m_arg1
Definition: mconcurrent.h:91
MConcurrent::VoidStoredMemberFunctionPointerCall2::m_fn
void(Class::* m_fn)(Param1, Param2)
Definition: mconcurrent.h:89
MConcurrent::VoidStoredMemberFunctionPointerCall2::m_object
Class * m_object
Definition: mconcurrent.h:90
MConcurrent::VoidStoredMemberFunctionPointerCall5::m_arg4
Arg4 m_arg4
Definition: mconcurrent.h:133
MConcurrent::VoidStoredMemberFunctionPointerCall4
Definition: mconcurrent.h:109
MConcurrent::VoidStoredMemberFunctionPointerCall4::runFunctor
void runFunctor() override
Definition: mconcurrent.h:115
MConcurrent::VoidStoredMemberFunctionPointerCall2
Definition: mconcurrent.h:81
mthreadpool.h
MConcurrent::VoidStoredMemberFunctionPointerCall1::VoidStoredMemberFunctionPointerCall1
VoidStoredMemberFunctionPointerCall1(void(Class::*fn)(Param1), Class *object, const Arg1 &arg1)
Definition: mconcurrent.h:70
MConcurrent::VoidStoredMemberFunctionPointerCall0::VoidStoredMemberFunctionPointerCall0
VoidStoredMemberFunctionPointerCall0(void(Class::*fn)(), Class *object)
Definition: mconcurrent.h:57
MConcurrent::VoidStoredMemberFunctionPointerCall4::m_arg1
Arg1 m_arg1
Definition: mconcurrent.h:119
MConcurrent::VoidStoredMemberFunctionPointerCall4::m_arg3
Arg3 m_arg3
Definition: mconcurrent.h:119
MConcurrent::VoidStoredMemberFunctionPointerCall3::m_fn
void(Class::* m_fn)(Param1, Param2, Param3)
Definition: mconcurrent.h:103
MConcurrent::VoidStoredMemberFunctionPointerCall0::m_fn
void(Class::* m_fn)()
Definition: mconcurrent.h:62
MConcurrent::VoidStoredMemberFunctionPointerCall2::VoidStoredMemberFunctionPointerCall2
VoidStoredMemberFunctionPointerCall2(void(Class::*fn)(Param1, Param2), Class *object, const Arg1 &arg1, const Arg2 &arg2)
Definition: mconcurrent.h:84
MConcurrent::VoidStoredMemberFunctionPointerCall3::m_arg3
Arg3 m_arg3
Definition: mconcurrent.h:105
MConcurrent::VoidStoredMemberFunctionPointerCall3
Definition: mconcurrent.h:95
MConcurrent::VoidStoredMemberFunctionPointerCall5::m_arg1
Arg1 m_arg1
Definition: mconcurrent.h:133
MConcurrent::VoidStoredMemberFunctionPointerCall1
Definition: mconcurrent.h:67
MConcurrent::VoidStoredMemberFunctionPointerCall1::m_arg1
Arg1 m_arg1
Definition: mconcurrent.h:77
MConcurrent::RunFunctionTask::runFunctor
virtual void runFunctor()=0
MThreadPool::globalInstance
static MThreadPool * globalInstance(void)
Definition: mthreadpool.cpp:307
MConcurrent::VoidStoredMemberFunctionPointerCall1::runFunctor
void runFunctor() override
Definition: mconcurrent.h:73
MConcurrent::VoidStoredMemberFunctionPointerCall3::runFunctor
void runFunctor() override
Definition: mconcurrent.h:101
MConcurrent::VoidStoredMemberFunctionPointerCall1::m_fn
void(Class::* m_fn)(Param1)
Definition: mconcurrent.h:75
MConcurrent::VoidStoredMemberFunctionPointerCall1::m_object
Class * m_object
Definition: mconcurrent.h:76
MThreadPool::start
void start(QRunnable *runnable, const QString &debugName, int priority=0)
Definition: mthreadpool.cpp:342
MConcurrent::VoidStoredMemberFunctionPointerCall4::m_arg2
Arg2 m_arg2
Definition: mconcurrent.h:119