MythTV  master
Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Member Functions | Friends | List of all members
MThread Class Reference

This is a wrapper around QThread that does several additional things. More...

#include <mthread.h>

Inheritance diagram for MThread:
Inheritance graph
Collaboration diagram for MThread:
Collaboration graph

Public Member Functions

 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...

Static Public Member Functions

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 Public Attributes

static const int kDefaultStartTimeout

Protected Member Functions

virtual void run (void)
 Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead. More...
int exec (void)
 Enters the qt event loop. call exit or quit to exit thread. More...

Static Protected Member Functions

static void setTerminationEnabled (bool enabled=true)
static void sleep (unsigned long time)
static void msleep (unsigned long time)
static void usleep (unsigned long time)

Protected Attributes

MThreadInternalm_thread {nullptr}
QRunnable * m_runnable {nullptr}
bool m_prolog_executed {true}
bool m_epilog_executed {true}

Private Member Functions

 MThread (const MThread &)=delete
MThreadoperator= (const MThread &)=delete


class MThreadInternal

Detailed Description

This is a wrapper around QThread that does several additional things.

First it requires that you set the thread's name which is used for debugging.

It adds RunProlog() and RunEpilog() which are called automatically when you don't override run(), but must be called explicitly if you do. These take care of setting up logging and take care of dealing with QSqlConnections which are per-thread variables.

It also adds some sanity checking to the destructor so a thread can not be deleted while it still running.

Optionally it can be given a QRunnable to run in MThread::run() instead of calling QThread::run() (which starts an event loop.) When you override MThread::run() or use a QRunnable you are responsible for stopping the thread, MThread::exit() will not work.

Warning: Do not statically initialize MThreads. C++ itself doesn't allow you to specify the order of static initializations. See:

Definition at line 46 of file mthread.h.

Constructor & Destructor Documentation

◆ MThread() [1/3]

MThread::MThread ( const QString &  objectName)

Standard constructor.

Definition at line 102 of file mthread.cpp.

◆ MThread() [2/3]

MThread::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.

Unlike MThreadPool, MThread will not delete a runnable with the autoDelete property set.

Definition at line 110 of file mthread.cpp.

◆ ~MThread()

MThread::~MThread ( )

Definition at line 119 of file mthread.cpp.

◆ MThread() [3/3]

MThread::MThread ( const MThread )

Member Function Documentation

◆ RunProlog()

void MThread::RunProlog ( void  )

◆ RunEpilog()

void MThread::RunEpilog ( void  )

◆ qthread()

QThread * MThread::qthread ( void  )

◆ setObjectName()

void MThread::setObjectName ( const QString &  name)

◆ objectName()

QString MThread::objectName ( void  ) const

Definition at line 254 of file mthread.cpp.

Referenced by MThread(), TransferThread::run(), and ~MThread().

◆ setPriority()

void MThread::setPriority ( QThread::Priority  priority)

Definition at line 259 of file mthread.cpp.

◆ priority()

QThread::Priority MThread::priority ( void  ) const

Definition at line 264 of file mthread.cpp.

Referenced by DVBStreamHandler::CycleFiltersByPriority(), and setPriority().

◆ isFinished()

bool MThread::isFinished ( void  ) const

◆ isRunning()

bool MThread::isRunning ( void  ) const

◆ setStackSize()

void MThread::setStackSize ( uint  stackSize)

Definition at line 279 of file mthread.cpp.

◆ stackSize()

uint MThread::stackSize ( void  ) const

Definition at line 284 of file mthread.cpp.

Referenced by setStackSize().

◆ exit()

void MThread::exit ( int  retcode = 0)

◆ start()

void MThread::start ( QThread::Priority  p = QThread::InheritPriority)

Tell MThread to start running the thread in the near future.

Definition at line 294 of file mthread.cpp.

Referenced by MetadataImageDownload::addDownloads(), MetadataDownload::addLookup(), MetadataImageDownload::addThumb(), AutoExpire::AutoExpire(), CECAdapter::CECAdapter(), check_times(), MythRAOPDevice::Create(), MythAirplayServer::Create(), DatabaseLogger::DatabaseLogger(), MusicPlayer::decoderHandlerReady(), MythPlayer::DecoderStart(), VideoScanner::doScan(), GameScanner::doScan(), GrabberManager::doUpdate(), EITScanner::EITScanner(), FIFOWriter::FIFOInit(), finish_mpg(), MythSystemLegacyUnix::Fork(), CdDecoder::getMetadata(), GetRecordingListThread::GetRecordingListThread(), TVRec::Init(), UPNPScanner::Instance(), JobQueue::JobQueue(), MythSystemLegacyWindows::JumpAbort(), MythSystemLegacyUnix::JumpAbort(), logForwardStart(), logStart(), main(), MythSystemLegacyWindows::Manage(), MythMainWindow::MythMainWindow(), mythplugin_init(), MythSocket::MythSocket(), MythSystemLegacyUnix::MythSystemLegacyUnix(), MythSystemLegacyWindows::MythSystemLegacyWindows(), NetworkControl::NetworkControl(), HLSReader::Open(), ThreadedFileWriter::Open(), DVDStream::OpenFile(), HLSRingBuffer::OpenFile(), LinuxFirewireDevice::OpenPort(), PlaybackBoxHelper::PlaybackBoxHelper(), PlaylistContainer::PlaylistContainer(), MetadataDownload::prependLookup(), PreviewGeneratorQueue::PreviewGeneratorQueue(), GrabberDownloadThread::refreshAll(), MHIContext::Restart(), CDRipperThread::ripTrack(), NuppelVideoRecorder::run(), HLSRingBuffer::SanitizeStreams(), ExternRecChannelScanner::Scan(), VBoxChannelFetcher::Scan(), IPTVChannelFetcher::Scan(), Scheduler::SchedNewFirstPass(), Scheduler::SchedNewRetryPass(), Scheduler::Scheduler(), SSDP::SSDP(), DVBCam::Start(), MythSignalingTimer::start(), LIRC::start(), DeviceReadBuffer::Start(), SignalMonitor::Start(), StreamHandler::Start(), RingBuffer::Start(), Ripper::startEjectCD(), MediaMonitorDarwin::StartMonitoring(), MediaMonitor::StartMonitoring(), AudioOutputBase::StartOutputThread(), RipStatus::startRip(), Ripper::startScanCD(), ChannelScanSM::StartScanner(), TaskQueue::TaskQueue(), AudioTest::toggle(), AudioSetupWizard::toggleSpeakers(), TVRec::TuningNewRecorder(), TVBrowseHelper::TVBrowseHelper(), VBIThread::VBIThread(), MetadataFactory::VideoScan(), and WaitUntilDone().

◆ terminate()

void MThread::terminate ( void  )

Kill a thread unsafely.

This should never be called on a thread while it holds a mutex or semaphore, since those locks will never be unlocked. Use the static setTerminationEnabled(true) to tell MThread when it is safe to terminate the thread and setTerminationEnabled(false) to tell it that termination is not safe again.

Definition at line 301 of file mthread.cpp.

◆ quit()

void MThread::quit ( void  )

calls exit(0)

Definition at line 306 of file mthread.cpp.

Referenced by UPNPScanner::Instance(), and MythSocket::~MythSocket().

◆ ThreadSetup()

void MThread::ThreadSetup ( const QString &  name)

◆ ThreadCleanup()

void MThread::ThreadCleanup ( void  )

This is to be called on exit in those few threads that haven't been ported to MThread.

Definition at line 237 of file mthread.cpp.

Referenced by dfd_controller_thunk(), JobQueue::FlagCommercialsThread(), JobQueue::MetadataLookupThread(), MPEG2fixup::ReplexStart(), RunEpilog(), JobQueue::TranscodeThread(), and JobQueue::UserJobThread().

◆ wait()

bool MThread::wait ( unsigned long  time = ULONG_MAX)

Wait for the MThread to exit, with a maximum timeout.

timeMaximum time to wait for MThread to exit, in ms

Definition at line 311 of file mthread.cpp.

Referenced by HLSPlaylistWorker::Cancel(), HLSStreamWorker::Cancel(), StreamWorker::Cancel(), PlaylistWorker::Cancel(), PlaylistContainer::cleanOutThreads(), cleanup(), MythRAOPDevice::Cleanup(), MythAirplayServer::Cleanup(), LinuxFirewireDevice::ClosePort(), RipStatus::customEvent(), MythPlayer::DecoderEnd(), MusicPlayer::decoderHandlerReady(), MThreadPool::DeletePoolThreads(), DVBSignalMonitor::DVBSignalMonitor(), VBoxChannelFetcher::GetChannels(), IPTVChannelFetcher::GetChannels(), UPNPScanner::Instance(), NuppelVideoRecorder::KillChildren(), RingBuffer::KillReadAheadThread(), logStop(), AudioTest::prepareTest(), PlaylistWorker::run(), ShutdownMythSystemLegacy(), DeviceReadBuffer::Start(), StreamHandler::Start(), ChannelScanSM::StartScanner(), AlarmNotifyThread::stop(), MythSignalingTimer::stop(), DVBCam::Stop(), ExternRecChannelScanner::Stop(), FirewireSignalMonitor::Stop(), SignalMonitor::Stop(), DeviceReadBuffer::Stop(), VBoxChannelFetcher::Stop(), IPTVChannelFetcher::Stop(), StreamHandler::Stop(), DecoderHandler::stop(), DatabaseLogger::stopDatabaseAccess(), MHIContext::StopEngine(), MediaMonitor::StopMonitoring(), AudioOutputBase::StopOutputThread(), V4LRecorder::StopRecording(), ChannelScanSM::StopScanner(), LIRC::TeardownAll(), EITScanner::TeardownAll(), PreviewGeneratorQueue::TeardownPreviewGeneratorQueue(), TVRec::TeardownRecorder(), AudioTest::toggle(), AudioSetupWizard::toggleSpeakers(), Scheduler::Wait(), TVBrowseHelper::Wait(), AudioSetupWizard::~AudioSetupWizard(), AudioTest::~AudioTest(), AudioTestThread::~AudioTestThread(), AutoExpire::~AutoExpire(), CDRipperThread::~CDRipperThread(), CECAdapter::~CECAdapter(), DBLoggerThread::~DBLoggerThread(), DecoderThread::~DecoderThread(), FIFOWriter::~FIFOWriter(), GameScanner::~GameScanner(), GrabberDownloadThread::~GrabberDownloadThread(), GrabberScript::~GrabberScript(), HouseKeeper::~HouseKeeper(), JobQueue::~JobQueue(), LogForwardThread::~LogForwardThread(), LoggerThread::~LoggerThread(), MetadataDownload::~MetadataDownload(), MetadataFactory::~MetadataFactory(), MetadataImageDownload::~MetadataImageDownload(), MonitorThread::~MonitorThread(), MythMainWindow::~MythMainWindow(), MythSignalingTimer::~MythSignalingTimer(), MythSocket::~MythSocket(), MythSystemLegacyIOHandler::~MythSystemLegacyIOHandler(), MythSystemLegacyManager::~MythSystemLegacyManager(), MythSystemLegacySignalManager::~MythSystemLegacySignalManager(), NetworkControl::~NetworkControl(), PlaybackBoxHelper::~PlaybackBoxHelper(), PlaylistContainer::~PlaylistContainer(), PreviewGenerator::~PreviewGenerator(), PreviewGeneratorQueue::~PreviewGeneratorQueue(), RingBuffer::~RingBuffer(), Scheduler::~Scheduler(), SignalMonitor::~SignalMonitor(), SSDP::~SSDP(), TaskQueue::~TaskQueue(), ThreadedFileWriter::~ThreadedFileWriter(), TVRec::~TVRec(), V4LRecorder::~V4LRecorder(), VBIThread::~VBIThread(), and VideoScanner::~VideoScanner().

◆ Cleanup()

void MThread::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.

Definition at line 145 of file mthread.cpp.

Referenced by MythCoreContextPrivate::~MythCoreContextPrivate().

◆ GetAllThreadNames()

void MThread::GetAllThreadNames ( QStringList &  list)

Definition at line 183 of file mthread.cpp.

◆ GetAllRunningThreadNames()

void MThread::GetAllRunningThreadNames ( QStringList &  list)

Definition at line 191 of file mthread.cpp.

◆ operator=()

MThread& MThread::operator= ( const MThread )

◆ run()

void MThread::run ( void  )

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

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

Reimplemented in CopyImageThread, PlaylistWorker, StreamWorker, AlbumArtScannerThread, MetadataLoadingThread, LoggerThread, RingBuffer, DBLoggerThread, AudioTestThread, AudioOutputBase, LogForwardThread, HouseKeepingThread, GrabberDownloadThread, SignalMonitor, Scheduler, MPoolThread, DecoderThread, TVBrowseHelper, SSDP, ThumbThread< DBFS >, MetadataImageDownload, IPTVStreamHandler, ThumbThread< ImageDbLocal >, ThumbThread< ImageDbSg >, TaskQueue, JoystickMenuThread, MythSystemLegacySignalManager, HDHRStreamHandler, MythSystemLegacySignalManager, DeleteThread, VBIThread, ExternalStreamHandler, CDRipperThread, MythSystemLegacyManager, ASIStreamHandler, NVRAudioThread, TransferThread, VideoScannerThread, PreviewGenerator, DeviceReadBuffer, MythSystemLegacyManager, AppleRemote, MetadataDownload, NVRWriteThread, CdDecoder, DVBStreamHandler, MythDownloadManager, ExpireThread, FileCopyThread, GrabberScript, ImageScanThread< DBFS >, LIRC, GetRecordingListThread, CDEjectorThread, ImageScanThread< ImageDbLocal >, ImageScanThread< ImageDbSg >, MythSignalingTimer, MythSystemLegacyIOHandler, V4L2encStreamHandler, GameScannerThread, TFWSyncThread, FileScannerThread, HLSStreamHandler, MythSystemLegacyIOHandler, ShellThread, avfDecoder, MonitorThread, CDScannerThread, CECAdapter, FirewireTableMonitorThread, HTTPTSStreamHandler, TFWWriteThread, PlaylistLoadingThread, AlarmNotifyThread, DeleteThread, FIFOThread, HLSStreamWorker, HLSPlaylistWorker, and MonitorThreadDarwin.

Definition at line 318 of file mthread.cpp.

◆ exec()

int MThread::exec ( void  )

Enters the qt event loop. call exit or quit to exit thread.

Definition at line 328 of file mthread.cpp.

Referenced by AppleRemote::run(), and IPTVStreamHandler::run().

◆ setTerminationEnabled()

void MThread::setTerminationEnabled ( bool  enabled = true)

Definition at line 333 of file mthread.cpp.

Referenced by RunProlog().

◆ sleep()

void MThread::sleep ( unsigned long  time)

Definition at line 338 of file mthread.cpp.

Referenced by Scheduler::run().

◆ msleep()

void MThread::msleep ( unsigned long  time)

Definition at line 343 of file mthread.cpp.

Referenced by PlaylistLoadingThread::run(), and TaskQueue::run().

◆ usleep()

void MThread::usleep ( unsigned long  time)

Friends And Related Function Documentation

◆ MThreadInternal

friend class MThreadInternal

Definition at line 48 of file mthread.h.

Member Data Documentation

◆ kDefaultStartTimeout

const int MThread::kDefaultStartTimeout

Definition at line 114 of file mthread.h.

◆ m_thread

MThreadInternal* MThread::m_thread {nullptr}

◆ m_runnable

QRunnable* MThread::m_runnable {nullptr}

Definition at line 136 of file mthread.h.

Referenced by run().

◆ m_prolog_executed

bool MThread::m_prolog_executed {true}

Definition at line 137 of file mthread.h.

Referenced by RunProlog(), start(), and ~MThread().

◆ m_epilog_executed

bool MThread::m_epilog_executed {true}

Definition at line 138 of file mthread.h.

Referenced by RunEpilog(), start(), and ~MThread().

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