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.
 
 

54 lines
1.0 KiB

#pragma once
#include <functional>
extern "C" {
#include "cmsis_os.h"
}
namespace iflytop {
using namespace std;
typedef function<void()> zosthread_cb_t;
class ZThread {
public:
typedef enum {
kidle,
kworking,
kdead,
} status_t;
const char* m_name;
uint32_t m_stacksize;
osPriority m_uxPriority;
status_t m_status = kidle;
bool m_threadisworkingFlagCallSide = false;
zosthread_cb_t m_taskfunction;
zosthread_cb_t m_taskfunction_exitcb;
EventGroupHandle_t m_zthreadstartworkevent;
osThreadId m_defaultTaskHandle;
SemaphoreHandle_t m_lock;
public:
void init(const char* threadname, int stack_size = 512, osPriority priority = osPriorityNormal);
void start(zosthread_cb_t cb);
void start(zosthread_cb_t cb, zosthread_cb_t exitcb);
void stop();
bool getExitFlag() { return !m_threadisworkingFlagCallSide; }
bool isworking() { return m_status == kworking; }
void wake();
static void sleep(uint32_t ms);
public:
void threadcb();
};
} // namespace iflytop