libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
thread.cpp
1#include "thread.hpp"
2
3#include <cerrno>
4
5#include "libxr_def.hpp"
6#include "monotonic_time.hpp"
7#include "timebase.hpp"
8
9using namespace LibXR;
10
11extern struct timespec libxr_linux_start_time_spec;
12
13Thread Thread::Current(void) { return Thread(pthread_self()); }
14
15void Thread::Sleep(uint32_t milliseconds)
16{
17 timespec ts = MonotonicTime::RelativeFromMilliseconds(milliseconds);
18 while (clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, &ts) == EINTR)
19 {
20 }
21}
22
23void Thread::SleepUntil(MillisecondTimestamp& last_waskup_time, uint32_t time_to_sleep)
24{
25 last_waskup_time = last_waskup_time + time_to_sleep;
26
27 const timespec ts =
28 MonotonicTime::AddMilliseconds(libxr_linux_start_time_spec, last_waskup_time);
29
30 while (clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &ts, nullptr) == EINTR)
31 {
32 }
33}
34
36{
38}
39
40void Thread::Yield() { sched_yield(); }
表示毫秒级时间戳的类。Class representing a timestamp in milliseconds.
线程管理类,封装 POSIX 线程创建和调度 Thread management class encapsulating POSIX thread creation and scheduling
Definition thread.hpp:18
Thread()
默认构造函数,初始化空线程 Default constructor initializing an empty thread
Definition thread.hpp:38
static uint32_t GetTime()
获取当前系统时间(毫秒) Gets the current system time in milliseconds
Definition thread.cpp:35
static void SleepUntil(MillisecondTimestamp &last_waskup_time, uint32_t time_to_sleep)
让线程休眠直到指定时间点 Puts the thread to sleep until a specified time
Definition thread.cpp:23
static Thread Current(void)
获取当前线程对象 Gets the current thread object
Definition thread.cpp:13
static void Sleep(uint32_t milliseconds)
让线程进入休眠状态 Puts the thread to sleep
Definition thread.cpp:15
static void Yield()
让出 CPU 以执行其他线程 Yields CPU execution to allow other threads to run
Definition thread.cpp:40
static MillisecondTimestamp GetMilliseconds()
获取当前时间的毫秒级时间戳。 Gets the current timestamp in milliseconds.
Definition timebase.hpp:63
LibXR 命名空间
Definition ch32_can.hpp:14