initial
This commit is contained in:
108
vnproglib/cpp/include/vn/thread.h
Normal file
108
vnproglib/cpp/include/vn/thread.h
Normal file
@ -0,0 +1,108 @@
|
||||
/// \file
|
||||
/// {COMMON_HEADER}
|
||||
///
|
||||
/// \section DESCRIPTION
|
||||
/// This header file provides the class Thread.
|
||||
#ifndef _VNXPLAT_THREAD_H_
|
||||
#define _VNXPLAT_THREAD_H_
|
||||
|
||||
#include "int.h"
|
||||
#include "export.h"
|
||||
#include "nocopy.h"
|
||||
|
||||
#if _WIN32
|
||||
#include <Windows.h>
|
||||
#elif __linux__ || __APPLE__ || __CYGWIN__ || __QNXNTO__
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
#else
|
||||
#error "Unknown System"
|
||||
#endif
|
||||
|
||||
namespace vn {
|
||||
namespace xplat {
|
||||
|
||||
/// \brief Represents a cross-platform thread.
|
||||
class vn_proglib_DLLEXPORT Thread : private util::NoCopy
|
||||
{
|
||||
|
||||
// Types //////////////////////////////////////////////////////////////////
|
||||
|
||||
public:
|
||||
|
||||
/// \brief Represents a start routine for a thread which will have data
|
||||
/// passed to it.
|
||||
typedef void (*ThreadStartRoutine)(void*);
|
||||
|
||||
// Constructors ///////////////////////////////////////////////////////////
|
||||
|
||||
public:
|
||||
|
||||
~Thread();
|
||||
|
||||
private:
|
||||
|
||||
/// \brief Creates a new <c>Thread</c> object.
|
||||
///
|
||||
/// \param[in] startRoutine The routine to call when the thread is started.
|
||||
explicit Thread(ThreadStartRoutine startRoutine);
|
||||
|
||||
// Public Methods /////////////////////////////////////////////////////////
|
||||
|
||||
public:
|
||||
|
||||
/// \brief Starts a new thread immediately which calls the provided start
|
||||
/// routine and passes the routine data to the new thread.
|
||||
///
|
||||
/// \param[in] startRoutine The routine to be called when the new thread is
|
||||
/// started.
|
||||
/// \param[in] routineData Pointer to data that will be passed to the new
|
||||
/// thread via its start routine.
|
||||
/// \return A <c>Thread</c> object representing the newly started thread.
|
||||
/// User must delete the returned pointer when finished.
|
||||
static Thread* startNew(ThreadStartRoutine startRoutine, void* routineData);
|
||||
|
||||
/// \brief Starts the thread.
|
||||
///
|
||||
/// \param[in] routineData Pointer to the routine data which the new thread
|
||||
/// have access to.
|
||||
void start(void* routineData);
|
||||
|
||||
/// \brief Blocks the calling thread until this thread finishes.
|
||||
void join();
|
||||
|
||||
/// \brief Causes the thread to sleep the specified number of seconds.
|
||||
///
|
||||
/// \param[in] numOfSecsToSleep The number of seconds to sleep.
|
||||
static void sleepSec(uint32_t numOfSecsToSleep);
|
||||
|
||||
/// \brief Causes the thread to sleep the specified number of milliseconds.
|
||||
///
|
||||
/// \param[in] numOfMsToSleep The number of milliseconds to sleep.
|
||||
static void sleepMs(uint32_t numOfMsToSleep);
|
||||
|
||||
/// \brief Causes the thread to sleep the specified number of microseconds.
|
||||
///
|
||||
/// \param[in] numOfUsToSleep The number of microseconds to sleep.
|
||||
static void sleepUs(uint32_t numOfUsToSleep);
|
||||
|
||||
/// \brief Causes the thread to sleep the specified number of nanoseconds.
|
||||
///
|
||||
/// \param[in] numOfNsToSleep The number of nanoseconds to sleep.
|
||||
static void sleepNs(uint32_t numOfNsToSleep);
|
||||
|
||||
// Private Members ////////////////////////////////////////////////////////
|
||||
|
||||
private:
|
||||
|
||||
// Contains internal data, mainly stuff that is required for cross-platform
|
||||
// support.
|
||||
struct Impl;
|
||||
Impl *_pimpl;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user