Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
延时
线程
线程中的延时函数的问题
发布于 2021-07-29 13:23:40 浏览:1290
订阅该版
开启了两个线程,两个线程的优先级都是20,tid1的tick=5,tid2的tick=1 在tid1线程中计数打印,但是加了1000个tick的延时,超过了该线程的5个tick 在tid2线程中计数打印,但是加了2000个tick的延时,超过了该线程的1个tick 程序执行的过程中 tid1输出2次后tid2输出1次 这其中的是什么导致了这样的结果? 我的想法是tid1先启动,到延时的时候timer的优先级高于tid1,cpu执行timer后导致的这个问题,但是如果我将tid的优先级都达到3后还是这样,请问这其中究竟是什么导致的? ```c #include
#define THREAD_STACK_SIZE 1024 #define THREAD_PRIORITY 20 #define THREAD_TIMESLICE 10 /* 线程入口 */ static void thread1_entry(void* parameter) { rt_uint32_t count = 0; while (1) { count++; rt_kprintf("thread1: %d \n",count); if(count>200){ break; } rt_thread_delay(1000); } } static void thread2_entry(void* parameter) { rt_uint32_t count = 200; while (1) { count++; rt_kprintf("thread2: %d \n",count); if(count>400){ break; } rt_thread_delay(2000); } } int main(void) { rt_thread_t tid = RT_NULL; /* 创建线程 1 */ tid = rt_thread_create("thread1", thread1_entry, (void*)1, THREAD_STACK_SIZE, THREAD_PRIORITY, 5);//单次最大允许5ms if (tid != RT_NULL) rt_thread_startup(tid); /* 创建线程 2 */ tid = rt_thread_create("thread2", thread2_entry, (void*)2, THREAD_STACK_SIZE, THREAD_PRIORITY, 1); //单次最大允许允许1ms if (tid != RT_NULL) rt_thread_startup(tid); return 0; } ```
查看更多
小小李sunny
2021-07-29
这家伙很懒,什么也没写!
这是操作系统的任务调度导致了这样正确的现象。 你的线程tid1延时1000tick,线程tid2延时2000tick,tid1输出2次,tid2输出一次,这很正常的现象。 你两个线程的时间片不一样,系统对优先级相同的就绪态线程采用时间片轮转的调度方式进行调度时,时间片起到约束线程单次运行时长的作用。假设有 2 个优先级相同的就绪态线程 A 与 B,A 线程的时间片设置为 10,B 线程的时间片设置为 5,那么当系统中不存在比 A 优先级高的就绪态线程时,系统会在 A、B 线程间来回切换执行,并且每次对 A 线程执行 10 个节拍的时长,对 B 线程执行 5 个节拍的时长。
2
个回答
默认排序
按发布时间排序
zhkag
2021-07-29
这家伙很懒,什么也没写!
tid1输出2次后tid2输出1次,这是正常的现象呀, tid1的tick=5,tid2的tick=1,这是时间片轮询的时间长度,和总时间没有什么影响的,不会改变总时间的长度
撰写答案
登录
注册新账号
关注者
0
被浏览
1.3k
关于作者
SKYLIN
这家伙很懒,什么也没写!
提问
1
回答
0
被采纳
0
关注TA
发私信
相关问题
1
请问执行rt_thread_delete的操作后,线程还在运行是什么情况?
2
rtthread中,线程中的ADC采样率需求比时钟嘀嗒需求高怎么办?
3
有没有检测系统中有没有某个名字的线程的接口函数?
4
使用finsh 进行ota成功,线程里开ota失败
5
调度锁会引起线程内存不足
6
线程处于close状态消耗资源吗
7
paho_mqtt线程相关疑问
8
thread中不能使用rt_timer_start() 来开启定时器
9
线程递归是什么形成的?
10
程序运行一会儿报错,拜托拜托
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部