7193|20

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

CE5.0下线程优先级 [复制链接]

我做一个键盘鼠标驱动,开了一个线程采集数据.在CPU不忙时能几个毫秒采集一次,CPU很忙时,特别是打开media play进,采集间隔一下子就变成了几十毫秒.我的线程优先级用cesetthreadpriority曾经提到过0,还是不起作用,不知道还需要设置什么?
各位帮帮忙,给我出出点子.

最新回复

楼主没良心,好心告知回帖,也不给分结帖  详情 回复 发表于 2009-10-7 15:59
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你的采集过程,是放在IST、还是ISR中?
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
采集线程设置高了,处理是否还有线程,如果有该处理线程也应该设置的比播放器优先级高才行
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
这问题问我就对了,线程优先级也是我的长项之一:
CeSetThreadPriority这个指令非常好用
调用CeSetThreadPriority应注意:
1.Thread是否正确?(意思是,只能用在中断一进入的那个服务程式)
2.优先级别,可先用Process View(EVC,VS2005,PB都有)来看看哪些级别已经被占用了?

以我的经验,目前我就是设0和2 超级优先的级(1已被系统定时中断占用)
运作非常正常很完美.



 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(中级)

5
 
我没有使用IST/ISR
在xxx_init函数内使用createthread创建了一个线程,然后调用cesetthreadpriority。
线程内做了个循环:
while(exitthread)
{
sleep(0)
..
读取数据
..
读到数据存入缓冲内
...
}

处理代码会放到缓部内取数据处理。

过程如上所说。优先级也提到过0,效果不明显。
大侠们帮忙看看,有什么要改的。
先谢了。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
sleep(0)做什么用的?
休眠就是让别的进程抢占资源,楼主可以把sleep去掉试试。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 
Sleep  主动放弃时间片。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

8
 
因为线程本身是个循环,用Sleep(0)只是让线程不独占CPU,否则系统会死。
我理解sleep(0)是进行SLEEP函数让线程休息,放弃控制权,因为延时为0,马上又恢复线程的控制权,只是进出一下函数。
如果是sleep问题,我前面试过一个方法,用waitforsignalobject来代替sleep,结果一样,控制权还是被抢。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
如果我把线程轮询改为中断方式会有效果吗?
用ISR还是IST好呢?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

10
 
cesetthreadpriority曾经提到过0,还是不起作用

驱动线程不能这么高的,记得是97开始才是驱动。所以楼主设置成0没有用作用的。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

11
 
驱动的优先升级是从97-152,APP的优先级从248-255

其他为保留参数
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

12
 
ISR的优先级永远高于IST,不知道是不是你的ISR影响!
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

13
 
MARK 一下
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

14
 
cesetthreadpriority曾经提到过0,还是不起作用

驱动线程不能这么高的,记得是97开始才是驱动。所以楼主设置成0没有用作用的。
-------------------
呵呵 这句话恐怕要收回

CeSetThreadPriority(gEINTIntrThread , 0);
CeSetThreadPriority(gEINTIntrThread_PLC , 2);
这两行设定在我的AP,的确就是如此,
也发挥了超级优先的顺序

我设置0和2是有非常有效的 ^^
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

15
 
附注:已经以示波器验证,效果显著
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 7 楼 lsgxx 的回复:
因为线程本身是个循环,用Sleep(0)只是让线程不独占CPU,否则系统会死。
我理解sleep(0)是进行SLEEP函数让线程休息,放弃控制权,因为延时为0,马上又恢复线程的控制权,只是进出一下函数。
如果是sleep问题,我前面试过一个方法,用waitforsignalobject来代替sleep,结果一样,控制权还是被抢。


我用线程回调函数,函数内直接用while(true)循环,都不会独占cpu,楼主只管去掉试试。
查找下播放器的优先级多少,将线程设置比播放器高一级,就不会被播放器抢占了。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 3 楼 harktrip 的回复:
这问题问我就对了,线程优先级也是我的长项之一:
CeSetThreadPriority这个指令非常好用
调用CeSetThreadPriority应注意:
1.Thread是否正确?(意思是,只能用在中断一进入的那个服务程式)
2.优先级别,可先用Process View(EVC,VS2005,PB都有)来看看哪些级别已经被占用了?

以我的经验,目前我就是设0和2 超级优先的级(1已被系统定时中断占用)
运作非常正常很完美.




强!学习了!!!
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

18
 
ceSetthreadPriority将Thread的优先级设置高了,其他线程会受影响,lz看看其他线程是不是慢了很多,如果是,那就是设置起了作用
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

19
 
不是优先级的问题,是你的线程一直在active状态,一直抢占时间片,其他人都没法玩了
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

20
 
“我的线程优先级用cesetthreadpriority曾经提到过0”
这个,LZ 用cegetthreadpriority确定过吗?

有可能是优先级反转了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表