/*********************************************
* @brief 让出当前线程
********************************************/
void thrd_yield(void);
!subtitle:说明
让出当前线程,提示调度系统重新调度线程,以允许其它线程运行。
当前线程仍是可以运行的状态,重新调度时仍可能运行当前线程。
!subtitle:参数
无
!subtitle:返回值
无
#include <stdio.h>
#include <threads.h>
#include <time.h>
// 通过让出实现睡眠
void yield_sleep(int seconds)
{
// 获取当前时间戳(秒)
// 亚秒级时间被丢弃,因此休眠时间并不准确
time_t start = time(NULL);
do
{
thrd_yield();
}
while(time(NULL) - start < seconds);
}
int main(void)
{
printf("开始时间: %s", ctime(&(time_t){time(NULL)}));
// 睡眠
yield_sleep(3);
printf("结束时间: %s", ctime(&(time_t){time(NULL)}));
return 0;
}
运行结果:
开始时间: Fri Aug 22 14:51:18 2025
结束时间: Fri Aug 22 14:51:21 2025
C17 standard (ISO/IEC 9899:2018):
7.26.5.8 The thrd_yield function (p: 281)
C11 standard (ISO/IEC 9899:2011):
7.26.5.8 The thrd_yield function (p: 385)