MythTV  master
Signals | Public Member Functions | Private Member Functions | Private Attributes | List of all members
MythSignalingTimer Class Reference

This class is essentially a workaround for a Qt 4.5.2 bug where it will get stuck in the Qt event loop for up to 999 nanoseconds per timer firing. More...

#include <mythsignalingtimer.h>

Inheritance diagram for MythSignalingTimer:
Inheritance graph
[legend]
Collaboration diagram for MythSignalingTimer:
Collaboration graph
[legend]

Signals

void timeout (void)
 

Public Member Functions

 MythSignalingTimer (QObject *parent, const char *slot)
 
 ~MythSignalingTimer ()
 
virtual void stop (void)
 
virtual void start (int msec)
 
virtual bool blockSignals (bool block)
 
bool isActive (void) const
 

Private Member Functions

void run (void) override
 Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead. More...
 
- Private Member Functions inherited from MThread
 MThread (const QString &objectName)
 Standard constructor. More...
 
 MThread (const QString &objectName, QRunnable *runnable)
 Use this constructor if you want the default run() method to run the QRunnable's run() method instead of entering the Qt event loop. More...
 
virtual ~MThread ()
 
void RunProlog (void)
 Sets up a thread, call this if you reimplement run(). More...
 
void RunEpilog (void)
 Cleans up a thread's resources, call this if you reimplement run(). More...
 
QThread * qthread (void)
 Returns the thread, this will always return the same pointer no matter how often you restart the thread. More...
 
void setObjectName (const QString &name)
 
QString objectName (void) const
 
void setPriority (QThread::Priority priority)
 
QThread::Priority priority (void) const
 
bool isFinished (void) const
 
bool isRunning (void) const
 
void setStackSize (uint stackSize)
 
uint stackSize (void) const
 
void exit (int retcode=0)
 Use this to exit from the thread if you are using a Qt event loop. More...
 
void start (QThread::Priority=QThread::InheritPriority)
 Tell MThread to start running the thread in the near future. More...
 
void terminate (void)
 Kill a thread unsafely. More...
 
void quit (void)
 calls exit(0) More...
 
bool wait (unsigned long time=ULONG_MAX)
 Wait for the MThread to exit, with a maximum timeout. More...
 
int exec (void)
 Enters the qt event loop. call exit or quit to exit thread. More...
 

Private Attributes

QMutex m_startStopLock
 
QWaitCondition m_timerWait
 
volatile bool m_dorun {false}
 
volatile bool m_running {false}
 
volatile uint64_t m_millisec {0}
 
- Private Attributes inherited from MThread
MThreadInternalm_thread {nullptr}
 
QRunnable * m_runnable {nullptr}
 
bool m_prolog_executed {true}
 
bool m_epilog_executed {true}
 

Additional Inherited Members

- Static Private Member Functions inherited from MThread
static void ThreadSetup (const QString &)
 This is to be called on startup in those few threads that haven't been ported to MThread. More...
 
static void ThreadCleanup (void)
 This is to be called on exit in those few threads that haven't been ported to MThread. More...
 
static void Cleanup (void)
 This will print out all the running threads, call exit(1) on each and then wait up to 5 seconds total for all the threads to exit. More...
 
static void GetAllThreadNames (QStringList &list)
 
static void GetAllRunningThreadNames (QStringList &list)
 
static void setTerminationEnabled (bool enabled=true)
 
static void sleep (unsigned long time)
 
static void msleep (unsigned long time)
 
static void usleep (unsigned long time)
 
- Static Private Attributes inherited from MThread
static const int kDefaultStartTimeout
 

Detailed Description

This class is essentially a workaround for a Qt 4.5.2 bug where it will get stuck in the Qt event loop for up to 999 nanoseconds per timer firing.

This lost millisecond is not a huge issue for infrequent timers, but causes 7% lost CPU in the MythUI animate() handling.

Definition at line 20 of file mythsignalingtimer.h.

Constructor & Destructor Documentation

◆ MythSignalingTimer()

MythSignalingTimer::MythSignalingTimer ( QObject *  parent,
const char *  slot 
)

Definition at line 23 of file mythsignalingtimer.cpp.

◆ ~MythSignalingTimer()

MythSignalingTimer::~MythSignalingTimer ( )

Definition at line 31 of file mythsignalingtimer.cpp.

Member Function Documentation

◆ stop()

void MythSignalingTimer::stop ( void  )
virtual

◆ start()

void MythSignalingTimer::start ( int  msec)
virtual

◆ blockSignals()

virtual bool MythSignalingTimer::blockSignals ( bool  block)
inlinevirtual

Definition at line 31 of file mythsignalingtimer.h.

Referenced by MythMainWindow::animate().

◆ isActive()

bool MythSignalingTimer::isActive ( void  ) const
inline

Definition at line 33 of file mythsignalingtimer.h.

◆ timeout

void MythSignalingTimer::timeout ( void  )
signal

Referenced by MythSignalingTimer(), and run().

◆ run()

void MythSignalingTimer::run ( void  )
overrideprivatevirtual

Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.

Note
If you override this method you must call RunProlog before you do any work and RunEpilog before you exit the run method.

Reimplemented from MThread.

Definition at line 76 of file mythsignalingtimer.cpp.

Member Data Documentation

◆ m_startStopLock

QMutex MythSignalingTimer::m_startStopLock
private

Definition at line 42 of file mythsignalingtimer.h.

Referenced by run(), start(), and stop().

◆ m_timerWait

QWaitCondition MythSignalingTimer::m_timerWait
private

Definition at line 43 of file mythsignalingtimer.h.

Referenced by run(), and stop().

◆ m_dorun

volatile bool MythSignalingTimer::m_dorun {false}
private

Definition at line 44 of file mythsignalingtimer.h.

Referenced by run(), start(), and stop().

◆ m_running

volatile bool MythSignalingTimer::m_running {false}
private

Definition at line 45 of file mythsignalingtimer.h.

Referenced by run(), start(), and stop().

◆ m_millisec

volatile uint64_t MythSignalingTimer::m_millisec {0}
private

Definition at line 46 of file mythsignalingtimer.h.

Referenced by run(), and start().


The documentation for this class was generated from the following files: