用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

123 lines
2.3 KiB

#pragma once
#include <string>
#include <helper/SCriticalSection.h>
#include <helper/SNoCopyable.hpp>
//#include <helper/SFunctor.hpp>
#include <helper/SSemaphore.h>
namespace SOUI
{
class ThreadPrivate;
struct IRunnable;
/**
* Thread class for creating a thread.
*/
class Thread : public SNoCopyable
{
public:
enum ThreadPriority
{
High = 1,
Normal = 0,
Low = -1,
};
/**
* Get current thread ID.
* @return current thread ID.
*/
static long getCurrentThreadID();
/**
* Set stopping flag to thread. The thread may not be stopped immediately.
*/
void stop();
/**
* Wait for thread stopped synchronized.
*/
void waitForStop();
/**
* Get stopping flag.
* @return true if stopping flag is set.
*/
bool isStopping() ;
/**
* Get stopped flag.
* @return true if stopping flag is set or start flag is false.
*/
bool isStopped() ;
/**
* Get thread ID.
* @return thread ID.
*/
long getThreadID()
{
SAutoLock autoLock(_lock);
return _threadID;
}
/**
* Get thread name.
* @return thread name.
*/
std::string getName() ;
/**
* Identify whether thread is started.
* @return true if started.
*/
bool isStart()
{
SAutoLock autoLock(_lock);
return _start;
}
/**
* Default constructor.
*/
Thread();
/**
* Destructor.
*/
virtual ~Thread();
/**
* Invalid thread ID.
*/
static const long INVALID_THREAD_ID;
bool start(IRunnable *runnable, const std::string &name, ThreadPriority priority = Normal);
private:
/**
* For implementation on Windows,
* we have to use this Win32 thunk to call the c-style entry point : threadProc
*/
#ifdef WIN32
static unsigned int WINAPI threadProcWin32thunk(void * lpParameter);
#endif
static void *threadProc(void *args);
void clear();
void setThreadName(const std::string &name);
void setPriority(ThreadPriority priority);
// Thread object itself must be thread-safe
SCriticalSection _lock;
bool _start;
bool _stopping;
IRunnable *_runnable;
std::string _name;
long _threadID;
SSemaphore _startSem;
ThreadPrivate &_private;
ThreadPriority _priorityLevel;
};
}