Files
haiku-beta6/src/kits/app/RegistrarThread.cpp
T
shadow303 3bc6d6c59a gcc 3 fixes
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3845 a95241bf-73f2-0310-859d-f6bbb57e9c96
2003-07-04 21:10:14 +00:00

113 lines
2.2 KiB
C++

#include "RegistrarThread.h"
#include <string.h>
/*! \class RegistrarThread
\brief Base thread class for threads spawned and managed by the registrar
*/
// constructor
/*! \brief Creates a new RegistrarThread object, spawning the object's
thread.
Call Run() to actually get the thread running.
\param name The desired name of the new thread
\param priority The desired priority of the new thread
\param managerMessenger A BMessenger to the thread manager to which this
thread does or will belong.
*/
RegistrarThread::RegistrarThread(const char *name, int32 priority, BMessenger managerMessenger)
: fManagerMessenger(managerMessenger)
, fShouldExit(false)
, fIsFinished(false)
, fStatus(B_NO_INIT)
, fId(-1)
{
fName[0] = 0;
status_t err = name && fManagerMessenger.IsValid() ? B_OK : B_BAD_VALUE;
if (!err) {
fId = spawn_thread(&RegistrarThread::EntryFunction, name,
priority, (void*)this);
err = fId >= 0 ? B_OK : fId;
}
if (!err) {
strcpy(fName, name);
}
fStatus = err;
}
// destructor
/*! \brief Destroys the RegistrarThread object
*/
RegistrarThread::~RegistrarThread()
{
}
// InitCheck()
/*! \brief Returns the initialization status of the object
*/
status_t
RegistrarThread::InitCheck()
{
return fStatus;
}
// Run
/*! \brief Begins executing the thread's ThreadFunction()
*/
status_t
RegistrarThread::Run()
{
status_t err = InitCheck();
if (!err)
err = resume_thread(fId);
return err;
}
// Id
//! Returns the thread id
thread_id
RegistrarThread::Id() const
{
return fId;
}
// Name
//! Returns the name of the thread
const char*
RegistrarThread::Name() const
{
return fName;
}
// AskToExit
/*! \brief Signals to thread that it needs to quit politely as soon
as possible.
*/
void
RegistrarThread::AskToExit()
{
fShouldExit = true;
}
// IsFinished
/*! \brief Returns \c true if the thread has finished executing
*/
bool
RegistrarThread::IsFinished() const
{
return fIsFinished;
}
// EntryFunction
/*! \brief This is the function supplied to spawn_thread. It simply calls
ThreadFunction() on the \a data parameter, which is assumed to be a pointer
to a RegistrarThread object.
*/
int32
RegistrarThread::EntryFunction(void *data)
{
return ((RegistrarThread*)data)->ThreadFunction();
}