(100分!!!)线程设置了优先级,为什么还这么占用系统资源??

jiudon 2005-09-13 10:44:21
创建/设置优先级如下:
m_pProcessDataThread=AfxBeginThread(ProcessDataThread,THREAD_PRIORITY_NORMAL,NULL);
m_pRecvFileThread->SetThreadPriority(THREAD_PRIORITY_BELOW_NORMAL);

说明:
1/ ProcessDataThread线程中为十分耗时的操作!
2/ 界面在主线程处理的!

问题:
1/ 上面的方法设置优先级能不能起到作用?
2/ 怎么设置成:THREAD_PRIORITY_ABOVE_NORMAL & THREAD_PRIORITY_IDLE 效果没有什么差
别?(仍然占用系统资源厉害,并影响到了界面刷新!,明显感觉到机器很慢!)
...全文
358 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
playar0709 2005-11-27
  • 打赏
  • 举报
回复
呵呵,他说线程运行影响了主线程刷新
循环里用Sleep(0)应该是解决的好办法。主线程需要运行的时候就把cpu交给主线程。否则就自身满负荷运行。

---
: Chance is a gift for those who try
ChrisAK 2005-11-26
  • 打赏
  • 举报
回复
9494.就像下面这样的代码:
while (true)
{
}
运行时即使你把优先级设置为最低CPU的耗用率仍然是100%
至于楼上所说的Sleep问题,以下是MSDN对Sleep函数的解释.

void Sleep(
DWORD dwMilliseconds
);

Parameters
dwMilliseconds
[in] Minimum time interval for which execution is to be suspended, in milliseconds.
A value of zero causes the thread to relinquish the remainder of its time slice to any other thread of equal priority that is ready to run. If there are no other threads of equal priority ready to run, the function returns immediately, and the thread continues execution.

A value of INFINITE indicates that the suspension should not time out.

看到了吧?如果设置为0的话,除非还有同优先级的线程,否则Sleep会马上返回.等于没用嘛!
而且,如果ProcessDataThread十分耗时的话,建议还是不要用Sleep,因为在Sleep时你的线程
只是在等待,虾米都不会做,这将导致所需的时间更长!
playar0709 2005-11-26
  • 打赏
  • 举报
回复
给Sleep传入的参数应该用0,唉
什么20ms, 50ms,都是乱弹琴,

---
: Chance is a gift for those who try
DrSmart 2005-11-26
  • 打赏
  • 举报
回复
优先级低cpu仅对当前程序给予少量的cpu时间,和资源无关,想降低只有从程序的算法入手
alen_ghl 2005-11-21
  • 打赏
  • 举报
回复
Sleep()合适的时间就可以,一般我用50ms
DerryZhang 2005-11-21
  • 打赏
  • 举报
回复
加Sleep吧,我写的一个程序刚开始CPU总是100%,界面响应明显迟缓

但在循环中逐渐增加Sleep,来调整到一个比较合适的时间延时,CPU占用不会超过20%了:P
ookook 2005-09-28
  • 打赏
  • 举报
回复
你的十分耗时指的是什么?是纯数据处理吗?纯数据处理CPU利用率会一直很高,可以考虑在你的处理流程中适当的加入Sleep(0),主动放弃CPU,让其他饥饿线程得到CPU timeslot,或者改进你的算法,如果不是纯数据处理流程,或者加入消息循环,是当前消息得到处理,使重画等消息得到处理
jiudon 2005-09-27
  • 打赏
  • 举报
回复
看来除了使用sleep外别无它法了,


ProcessDataThread线程中为十分耗时的操作!

那你应该在这个函数里面经常的调用pumpmessage

---------------------------------------------->不知道是什么意思?!
pawnbroker 2005-09-24
  • 打赏
  • 举报
回复
优先级对资源占用影响不是很大。
反而你在程序设计的时候,及时释放空间、优化你代码,这样的效果会更好些
gohappy_1999 2005-09-24
  • 打赏
  • 举报
回复
mark
goodboyws 2005-09-23
  • 打赏
  • 举报
回复
线程优先级对资源的占用应该影响不大
phoenix96_2000 2005-09-23
  • 打赏
  • 举报
回复
不过如果只是占CPU资源,设置为IDLE后应该不会使得界面慢,
是不是还有频繁的IO访问和大量内存分配

是该从优化你的代码角度考虑
level1979 2005-09-23
  • 打赏
  • 举报
回复
没sleep或者什么地方有死循环
jiudon 2005-09-23
  • 打赏
  • 举报
回复
丷哈!
hjunxu 2005-09-16
  • 打赏
  • 举报
回复
如果真的非常耗时和占资源的话,我觉得从优先级这个角度解决不了啊,要么就提高硬件配置,要么把线程执行的代码看能不能再优化。
jiudon 2005-09-16
  • 打赏
  • 举报
回复
我再顶,这种请况只能加sleep()了么?!?
有没有其它方法可用阿?!
football 2005-09-16
  • 打赏
  • 举报
回复
ProcessDataThread线程中为十分耗时的操作!

那你应该在这个函数里面经常的调用pumpmessage
亿云力科技 2005-09-16
  • 打赏
  • 举报
回复
同意楼上的
oyljerry 2005-09-16
  • 打赏
  • 举报
回复
看能否优化代码,或提升配置等
孤客天涯 2005-09-13
  • 打赏
  • 举报
回复
在线程ProcessDataThread中加入Sleep
加载更多回复(6)

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧