1#ifndef NEFORCE_CORE_ASYNC_THIS_THREAD_HPP__
2#define NEFORCE_CORE_ASYNC_THIS_THREAD_HPP__
12#ifdef NEFORCE_PLATFORM_WINDOWS
14# include <processthreadsapi.h>
23#ifdef NEFORCE_PLATFORM_LINUX
27NEFORCE_BEGIN_NAMESPACE__
40NEFORCE_BEGIN_THIS_THREAD__
61#ifdef NEFORCE_PLATFORM_WINDOWS
62 return static_cast<int64_t>(::GetCurrentProcessorNumber());
64 return static_cast<int64_t>(::sched_getcpu());
73NEFORCE_ALWAYS_INLINE_INLINE
void yield() noexcept {
74#ifdef NEFORCE_PLATFORM_WINDOWS
87NEFORCE_ALWAYS_INLINE_INLINE
void relax() noexcept {
88#ifdef NEFORCE_COMPILER_MSVC
91# if defined(NEFORCE_ARCH_X86)
92 __builtin_ia32_pause();
93# elif defined(NEFORCE_ARCH_ARM)
94 asm volatile(
"yield");
95# elif defined(NEFORCE_ARCH_RISCV)
96 asm volatile(
"pause" :::
"memory");
97# elif defined(NEFORCE_ARCH_LOONGARCH)
98 asm volatile(
"dbar 0" :::
"memory");
100 this_thread::yield();
114#ifdef NEFORCE_PLATFORM_WINDOWS
120 ::nanosleep(&ts,
nullptr);
201NEFORCE_END_THIS_THREAD__
202NEFORCE_END_NAMESPACE__
unsigned int uint32_t
32位无符号整数类型
long long int64_t
64位有符号整数类型
unsigned long long uint64_t
64位无符号整数类型
duration< int64_t, milli > milliseconds
毫秒持续时间
bool cpu_time(cpu_times ×) noexcept
获取当前线程的 CPU 时间
void sleep_for_ns(uint64_t ns) noexcept
精确睡眠指定纳秒数
void relax() noexcept
线程放松
int priority() noexcept
获取线程优先级
void sleep_for_us(uint64_t us) noexcept
精确睡眠指定微秒数
bool affinity(uint64_t &affi) noexcept
获取线程的 CPU 亲和性
void yield() noexcept
让出当前线程的时间片
bool set_priority(int priority) noexcept
设置线程优先级
void sleep_for_ms(uint32_t milliseconds) noexcept
睡眠指定毫秒数
bool set_affinity(size_t cpu_mask) noexcept
设置线程的 CPU 亲和性
int64_t current_cpu() noexcept
获取当前CPU核心编号
typename decay< T >::type decay_t
decay的便捷别名