Qt线程优先级

Qt 线程优先级

关于线程或许需要了解的基础函数介绍

Qt里 线程分八个等级

ConstantValueDescription
QThread::IdlePriority0scheduled only when no other threads are running.
QThread::LowestPriority1scheduled less often than LowPriority.
QThread::LowPriority2scheduled less often than NormalPriority.
QThread::NormalPriority3the default priority of the operating system.
QThread::HighPriority4scheduled more often than NormalPriority.
QThread::HighestPriority5scheduled more often than HighPriority.
QThread::TimeCriticalPriority6scheduled as often as possible.
QThread::InheritPriority7use the same priority as the creating thread. This is the default.
  1. 项目中用到了UDP视频传输,但是传输效率太低了,因为是开发阶段我们用的是无线网+路由器,小组的组长让我试着设置线程优先级.抢些CPU的时间提高传输效率.上学期间不怎么喜欢学习,对线程优先级只是听说过,但不了解.所以以为线程优先级就是谁优先执行.

  2. 为了测试,于是开了三个线程,通过setPriority()函数设置thread1,thread2,thread3的优先级(mth1,mth2,mth3).妄想按顺序输出线程里面的打印语句.其实这样测试很惭愧啊哈哈哈,这样错误在于我对线程优先级的理解是错误的,线程的优先级越高抢到CPU时间片越多,执行相同的操作耗费时间就短,相反优先级越低,抢到的时间片就越少,耗时就长.这反映在线程执行所耗费的时间上,而非线程执行顺序,因为即线程的优先级仍然无法保障线程的执行次序,只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行介绍

  3. 在了解完这些后,既然线程已经开了,就多多少少写个测试.

    (1). 规规矩矩创建三个线程mth1,mth2,mth3,然后在一个按键的槽函数中启动他们.
    开线程
    (2). 接着在线程的构造函数中设置他们的优先级,例如线程1的
    在这里插入图片描述
    (3). run()函数里面写事件,我让i自加到100000000,测试三个线程各自所耗费的时间.
    头文件 #include<Windows.h>
    在这里插入图片描述
    (4). 实验结果
    通过获取cpu计数器的值,来计算执行完耗时操作需要的时间,我的内个时钟频率好像是10000000.
    QThread::TimeCriticalPriority 优先级:在这里插入图片描述

    QThread::NormalPriority 优先级:
    在这里插入图片描述
    QThread::LowestPriority 优先级:
    在这里插入图片描述
    结果:通过试验分析,多多少少还是可以看出来,设置线程优先级对线程抢占CPU时间片还是有确实的影响的.
    但这是把所有线程都设置为了相同的优先级…

.

.
我的目的就是测一下优先级能不能让线程执行耗时操作加快,也就是多抢写CPU的时间片
************************************************* 其实到这就可以了 *************************************************
.
.

但上面这是把所有线程都设置为了相同的优先级…若是设为不同的优先级会发生什么呢?

  1. 为了使结果更加明显计数累加到500000000,实验一次要等30+秒…
    我把mth1优先级设为IdlePriority,mth2优先级设为NormalPriority,线程3优先级设为TimeCriticalPriority
    但结果我看不懂,按上面的测试结果说,怎么也是线程mth3先执行完毕,然后还要比mth2快0.5s左右,也就是part3的差值大约为5000000,比mth1快的更多,但结果是… 在这里插入图片描述
    可以看出线程mth3并不快,甚至有时候最慢,这是为什么?他们所有的线程不同优先级的时候会跟优先级最低的保持一致?毕竟他们同属于同一个进程嘛?

  2. 于是我将线程mth1的优先级设为mth2相同的NormalPriority. 在这里插入图片描述
    惊喜的发现,貌似并没有任何改变,红色的是这次实验结果,绿色的是上张图片,也就是上次试验的结果

  3. 不禁又想,是不是跟优先级最高的保持一致?若把最高的优先级设为NormalPriority,耗时时间应该更长的.于是把mth1,mth2设为IdlePriority,mth3设为NormalPriority.
    在这里插入图片描述
    哎和谐!果然是!,很明显的耗时比刚才多了,这肯定是因为优先级的改变,不是因为刚回了一条微信消息.噢噢 强调一下,测试的时候,电脑上有开浏览器微信Qt等,但实验过程中没有进行关闭或重新打开什么,只是回了条微信… 在这里插入图片描述

  4. 不禁又一想,是不是只在一个线程里面设置优先级就可以统一所有线程的优先级了?管他呢试试,因为已经十一点多了,把计算的值设为100000000减少耗时时间,接着屏蔽掉mth1,mth2设置优先级的语句,通过设置mth3来操作,于是乎…
    (1). 都不设置,大家都是默认的
    在这里插入图片描述
    结果
    在这里插入图片描述
    按照我查阅到的资料,Qt里面的线程应该有默认的优先级的,可能是NormalPriority.
    (2). 设为IdlePriority
    在这里插入图片描述
    结果:在这里插入图片描述
    画红圈这个排除掉的话,发现线程耗时操作所用的时间果然所有的都变大了,所以设置一个线程的优先级确实可以影响到其他线程,可以这么说吧?

    (3) 设置为NormalPriority
    在这里插入图片描述
    结果:在这里插入图片描述
    这个结果表明,确实啊,Qt里面把线程的优先级都默认为这个NormalPriority了.

    (4).设置为TimeCriticalPriority
    在这里插入图片描述
    结果:
    在这里插入图片描述
    结果表明耗时还真变小了,我也没找到什么资料具体说明这个事情,只能靠这样总结一下.

以上:

总结一下就是:针对于Qt下的多线程(子线程),多个线程不设置优先级的时候为默认的NormalPriority,
多个线程设置了不同的优先级时所有线程与优先级最高的保持一致,
当只有一个线程设置优先级时,所有线程与它保持一致.
以上内容为自己通过本次试验做的总结,今天我只学习Qt其中或许我认为正确的潜在规律,至于原理什么的怎么解释,
还得依靠各位大佬,实在是没找到该怎么测组长要求我测的那个

组长:小白呀,想办法测一下Qt里面改变线程优先级对视频传输效率的影响!  
我:好嘞!

不管怎样决定下午试试效果.

先附上上面的源码:链接:https://pan.baidu.com/s/1RRptTiUvQeaRJqZibuMbHw
提取码:1024

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值