One Motor 0.6.0
RoboMaster全平台一站式电机驱动库
载入中...
搜索中...
未找到
Othread.hpp
浏览该文件的文档.
1
7#ifndef OTHREAD_HPP
8#define OTHREAD_HPP
9
10#include <functional>
11#include <chrono>
12
13#ifdef ONE_MOTOR_LINUX
14#include <thread>
15#else
16#include <zephyr/kernel.h>
17#endif
18
19namespace OneMotor::Thread
20{
27 template <typename Rep, typename Period>
28 void sleep_for(const std::chrono::duration<Rep, Period>& duration) noexcept
29 {
30#ifdef ONE_MOTOR_LINUX
31 std::this_thread::sleep_for(duration);
32#else
33 auto us = std::chrono::duration_cast<std::chrono::microseconds>(duration).count();
34 k_usleep(us);
35
36#endif
37 }
38
47 class Othread
48 {
49 public:
53 using ThreadFunc = std::function<void()>;
54
59#ifdef ONE_MOTOR_LINUX
60 explicit Othread(const ThreadFunc& func) noexcept;
61#else
62 explicit Othread(ThreadFunc func) noexcept;
63#endif
64
68 Othread() noexcept;
69
75 ~Othread();
76
77 Othread(const Othread&) = delete;
78 Othread(Othread&&) = delete;
79 Othread& operator=(const Othread&) = delete;
80 Othread& operator=(Othread&&) = delete;
81
87#ifdef ONE_MOTOR_LINUX
88 bool start(const ThreadFunc& func) noexcept;
89#else
90 bool start(ThreadFunc& func) noexcept;
91#endif
92
93
98 bool join() noexcept;
99
106 bool detach() noexcept;
107
112 [[nodiscard]] bool joinable() const noexcept;
113
114 private:
115 bool started{false};
116 bool joined{false};
117 bool detached{false};
118#ifdef ONE_MOTOR_LINUX
119 ThreadFunc thread_func{nullptr};
120 std::thread native_handle{};
121#else
122 static constexpr size_t StackSize = 1024;
123 K_KERNEL_STACK_MEMBER(stack_mem, StackSize);
124 mutable k_thread k_thread_handle{};
125 k_tid_t k_tid{};
126 ThreadFunc func_;
127#endif
128 };
129}
130
131#endif //OTHREAD_HPP
void sleep_for(const std::chrono::duration< Rep, Period > &duration) noexcept
使当前线程休眠指定的时间。
定义 Othread.hpp:28
Othread(ThreadFunc func) noexcept
构造函数,创建一个新的线程并立即开始执行。
定义 Z_Othread.cpp:14
bool detach() noexcept
将线程从当前对象中分离。
定义 L_Othread.cpp:80
bool join() noexcept
等待线程执行完成。
定义 L_Othread.cpp:58
bool joinable() const noexcept
检查线程是否可加入。
定义 L_Othread.cpp:53
Othread() noexcept
默认构造函数,创建一个空的线程对象,不开始执行。
std::function< void()> ThreadFunc
线程执行函数的类型定义。
定义 Othread.hpp:53
bool start(ThreadFunc &func) noexcept
启动线程执行。
定义 L_Othread.cpp:27