haiku/src/kits/app/RegistrarThread.cpp
Axel Dörfler 5edcfe9619 Cleanup!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15806 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-03 09:23:08 +00:00

125 lines
2.4 KiB
C++

/*
* Copyright 2001-2005, Haiku.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold (bonefish@users.sf.net)
*/
//! Base thread class for threads spawned and managed by the registrar
#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();
}