Thread.h 1.6 KB
Newer Older
1
/*
2
 * Copyright (c) 2006-2018, RT-Thread Development Team
3
 *
4
 * SPDX-License-Identifier: Apache-2.0
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 *
 * Change Logs:
 * Date           Author       Notes
 * 2016/10/1      Bernard      The first version
 */

#pragma once

#include <stdint.h>
#include <rtthread.h>

namespace rtthread
{

/** The Thread class allow defining, creating, and controlling thread functions in the system. */
class Thread
{
public:
23
    typedef void (*thread_func_t)(void *param);
24 25 26 27 28 29 30

    /** Allocate a new thread without starting execution
      @param   priority       initial priority of the thread function. (default: osPriorityNormal).
      @param   stack_size      stack size (in bytes) requirements for the thread function. (default: DEFAULT_STACK_SIZE).
      @param   stack_pointer  pointer to the stack area to be used by this thread (default: NULL).
    */
    Thread(rt_uint32_t stack_size = 2048,
31
           rt_uint8_t  priority = (RT_THREAD_PRIORITY_MAX * 2) / 3,
32 33 34 35 36 37
           rt_uint32_t tick = 20,
           const char *name = "th");

    Thread(void (*entry)(void *p),
           void *p = RT_NULL,
           rt_uint32_t stack_size = 2048,
38
           rt_uint8_t  priority = (RT_THREAD_PRIORITY_MAX * 2) / 3,
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
           rt_uint32_t tick = 20,
           const char *name = "th");

    virtual ~Thread();

    bool start();

    static void sleep(int32_t millisec);

    void wait(int32_t millisec);
    void join(int32_t millisec = -1);

protected:
    virtual void run();

private:
    static void func(Thread *pThis);

private:
    rt_thread_t _thread;

    thread_func_t _entry;
    void *_param;

    /* event for thread join */
    struct rt_event _event;
    bool started;
};

}