MythTV master
mthread.h
Go to the documentation of this file.
1#ifndef MYTH_THREAD_H
2#define MYTH_THREAD_H
3
4#include <climits>
5
6#include <QRunnable>
7#include <QThread>
8
9#include "mythbaseexp.h"
10#include "mythchrono.h"
11
12class MThreadInternal;
13class MThread;
14
18bool MBASE_PUBLIC is_current_thread(QThread *thread);
21
49{
50 friend class MThreadInternal;
51 public:
53 explicit MThread(const QString &objectName);
58 explicit MThread(const QString &objectName, QRunnable *runnable);
59 virtual ~MThread();
60
61 MThread(const MThread &) = delete; // not copyable
62 MThread &operator=(const MThread &) = delete; // not copyable
63
65 void RunProlog(void);
68 void RunEpilog(void);
69
72 QThread *qthread(void);
73
74 void setObjectName(const QString &name);
75 QString objectName(void) const;
76
77 void setPriority(QThread::Priority priority);
78 QThread::Priority priority(void) const;
79
80 bool isFinished(void) const;
81 bool isRunning(void) const;
82
83 void setStackSize(uint stackSize);
84 uint stackSize(void) const;
85
87 void exit(int retcode = 0);
89 void start(QThread::Priority p = QThread::InheritPriority);
97 void terminate(void);
98 void quit(void);
99
102 static void ThreadSetup(const QString& name);
105 static void ThreadCleanup(void);
106
107 public:
110 bool wait(std::chrono::milliseconds time = std::chrono::milliseconds::max());
111
115 static void Cleanup(void);
116 static void GetAllThreadNames(QStringList &list);
117 static void GetAllRunningThreadNames(QStringList &list);
118
119 protected:
125 virtual void run(void);
127 int exec(void);
128
129 static void setTerminationEnabled(bool enabled = true);
130 static void usleep(std::chrono::microseconds time);
131 template<typename R, typename P>
132 static typename std::enable_if_t<std::chrono::treat_as_floating_point<R>::value, void>
133 usleep(std::chrono::duration<R,P> time) { usleep(duration_cast<std::chrono::microseconds>(time)); }; // cppcheck-suppress [missingReturn,usleepCalled]
134
135 MThreadInternal *m_thread {nullptr};
136 QRunnable *m_runnable {nullptr};
137 bool m_prologExecuted {true};
138 bool m_epilogExecuted {true};
139};
140
141#endif // MYTH_THREAD_H
int exec(void)
Definition: mthread.cpp:81
This is a wrapper around QThread that does several additional things.
Definition: mthread.h:49
MThread(const MThread &)=delete
MThread & operator=(const MThread &)=delete
static std::enable_if_t< std::chrono::treat_as_floating_point< R >::value, void > usleep(std::chrono::duration< R, P > time)
Definition: mthread.h:133
unsigned int uint
Definition: freesurround.h:24
@ quit
Definition: lirc_client.h:30
bool MBASE_PUBLIC is_current_thread(MThread *thread)
Use this to determine if you are in the named thread.
Definition: mthread.cpp:40
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15
static bool isRunning(const char *program)
Returns true if a program containing the specified string is running on this machine.
void run(const QString &name, Class *object, void(Class::*fn)())
Definition: mconcurrent.h:137