AbstractThread
#ifndef _ABSTRACT_THREAD
#define _ABSTRACT_THREAD
#include
#include
#include “Platform.h”
EXTERN_C_START
class DLL_API AbstractThread
{
public:
AbstractThread(void);
virtual ~AbstractThread(void);
virtual int run() = 0;
void start();
void join();
void signalExit();
bool isSignalExit();
void yield() ;
std::thread::id get_thread_Id();
static void milliSleep(unsigned long milli);
private:
bool exitSignal;
std::thread th; //private 外部不可见 是安全的
mutable std::mutex mut;
};
EXTERN_C_END
#endif // !_ABSTRACT_THREAD
#include “AbstractThread.h”
#ifndef _WIN32
#include <pthread.h>
#else
#include <windows.h>
#endif
using namespace std;
AbstractThread::AbstractThread(void)
{
exitSignal= false;
}
AbstractThread::~AbstractThread(void)
{
}
void AbstractThread::yield()
{
#ifndef _WIN32
return sched_yield();
#else
SwitchToThread();
#endif
}
void AbstractThread::start() {
try {
std::thread th2(&AbstractThread::run,this);
th.swap(th2);
}
catch(std::exception& e)
{
throw e;
}
}
void AbstractThread::join() {
if(th.joinable())
th.join();
}
void AbstractThread::milliSleep(unsigned long milli) {
std::this_thread::sleep_for(std::chrono::milliseconds(milli));
}
std::thread::id AbstractThread::get_thread_Id()
{