1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2016/10/1 Bernard The first version 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #pragma once 12*10465441SEvalZero 13*10465441SEvalZero #include <stdint.h> 14*10465441SEvalZero #include <rtthread.h> 15*10465441SEvalZero 16*10465441SEvalZero namespace rtthread 17*10465441SEvalZero { 18*10465441SEvalZero 19*10465441SEvalZero /** The Thread class allow defining, creating, and controlling thread functions in the system. */ 20*10465441SEvalZero class Thread 21*10465441SEvalZero { 22*10465441SEvalZero public: 23*10465441SEvalZero typedef void (*thread_func_t) (void *param); 24*10465441SEvalZero 25*10465441SEvalZero /** Allocate a new thread without starting execution 26*10465441SEvalZero @param priority initial priority of the thread function. (default: osPriorityNormal). 27*10465441SEvalZero @param stack_size stack size (in bytes) requirements for the thread function. (default: DEFAULT_STACK_SIZE). 28*10465441SEvalZero @param stack_pointer pointer to the stack area to be used by this thread (default: NULL). 29*10465441SEvalZero */ 30*10465441SEvalZero Thread(rt_uint32_t stack_size = 2048, 31*10465441SEvalZero rt_uint8_t priority = (RT_THREAD_PRIORITY_MAX * 2)/3, 32*10465441SEvalZero rt_uint32_t tick = 20, 33*10465441SEvalZero const char *name = "th"); 34*10465441SEvalZero 35*10465441SEvalZero Thread(void (*entry)(void *p), 36*10465441SEvalZero void *p = RT_NULL, 37*10465441SEvalZero rt_uint32_t stack_size = 2048, 38*10465441SEvalZero rt_uint8_t priority = (RT_THREAD_PRIORITY_MAX * 2)/3, 39*10465441SEvalZero rt_uint32_t tick = 20, 40*10465441SEvalZero const char *name = "th"); 41*10465441SEvalZero 42*10465441SEvalZero virtual ~Thread(); 43*10465441SEvalZero 44*10465441SEvalZero bool start(); 45*10465441SEvalZero 46*10465441SEvalZero static void sleep(int32_t millisec); 47*10465441SEvalZero 48*10465441SEvalZero void wait(int32_t millisec); 49*10465441SEvalZero void join(int32_t millisec = -1); 50*10465441SEvalZero 51*10465441SEvalZero protected: 52*10465441SEvalZero virtual void run(); 53*10465441SEvalZero 54*10465441SEvalZero private: 55*10465441SEvalZero static void func(Thread *pThis); 56*10465441SEvalZero 57*10465441SEvalZero private: 58*10465441SEvalZero rt_thread_t _thread; 59*10465441SEvalZero 60*10465441SEvalZero thread_func_t _entry; 61*10465441SEvalZero void *_param; 62*10465441SEvalZero 63*10465441SEvalZero /* event for thread join */ 64*10465441SEvalZero struct rt_event _event; 65*10465441SEvalZero bool started; 66*10465441SEvalZero }; 67*10465441SEvalZero 68*10465441SEvalZero } 69