xref: /nrf52832-nimble/rt-thread/components/cplusplus/Thread.h (revision 104654410c56c573564690304ae786df310c91fc)
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