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