我已经编写了一个C ++库,该库执行一些非常繁重的CPU工作(所有数学和计算),并且如果留给自己的设备使用,将很容易消耗所有可用CPU资源的100%(它也被多线程化为可用逻辑的数量)机器上的核心)。

这样,我在主计算循环中有一个回调,使用该库的软件应该调用该回调:

while(true)

{

//do math here

callback(percent_complete);

}

在回调中,客户端调用Sleep(x)减慢线程速度。

最初,客户端代码是固定的Sleep(100)调用,但是由于某些计算机比其他计算机更快地完成数学运算,所以导致性能不可靠,这很糟糕,但是睡眠在所有计算机上都是相同的。因此,现在客户端检查系统时间,如果超过了1秒(==多次迭代),它将休眠半秒。

这是减慢线程速度的可接受方法吗?为了最大化性能,是否应该使用信号量/互斥量而不是Sleep()?每秒处理1毫秒x毫秒是否工作正常,还是我没有注意到某些错误?

我问的原因是,即使Taskman显示该进程占用了约10%的CPU,该计算机仍然陷入严重瘫痪。我已经探索过硬盘和内存争用无济于事,所以现在我想知道我减慢线程速度的方式是否导致了此问题。

谢谢!

为什么不对计算线程使用较低的优先级?这将确保安排其他线程,同时在不需要运行其他线程的情况下允许您的计算线程尽可能快地运行。

实际上,多数民众赞成在Windows上不是很可靠。我已经将该库移植到OS X,

c语言线程中sleep,关于c ++:减慢线程的最佳方法? 使用Sleep()可以吗?相关推荐

  1. java线程中的常用方法_[多线程] 线程中的常用方法-最详细

    线程中常用的方法 1.public void start() 使该线程开始执行:Java 虚拟机调用该线程的 run 方法. 2.public void run() 如果该线程是使用独立的 Runna ...

  2. 安卓在子线程中实现更新UI界面的三种方法 Handler+Message、runOnUiThread、控件.post()

    1.说明 安卓中UI线程为主线程,更新UI界面必须在主线程中进行,在子线程中实现更新UI界面的三种方法:Handler.RunOnUiThread.控件.post() 2.1 Handler (1)定 ...

  3. python中常见的三种选择结构_在Python中,实现多分支选择结构的最佳方法是

    在Python中,实现多分支选择结构的最佳方法是 答:if-elif-else 绘制建筑平面图时,被剖切的墙用 线绘制,定位轴线用 线绘制 答:粗实 细点画 智慧职教: 下列关于书写住院病历的叙述不正 ...

  4. java object大小_在Java中,确定对象object大小的最佳方法是什么? - Break易站

    例如,假设我有一个应用程序,它可以读取包含一堆数据行的CSV文件.我根据数据类型向用户提供行数摘要,但是我想确保不读取太多数据行并导致OutOfMemoryErrors.每一行都会翻译成一个对象.有没 ...

  5. python 线程中出现执行错乱_python线程中的同步问题

    多线程开发可能遇到的问题 假设两个线程t1和t2都要对num=0进行增1运算,t1和t2都各对num修改1000000次,num的最终的结果应该为2000000.但是由于是多线程访问,有可能出现下面情 ...

  6. java中两个xml文件内容拼接_比较Java中2个XML文档的最佳方法

    慕丝7291255 听起来像是XMLUnit的工作http://www.xmlunit.org/https://github.com/xmlunit例子:public class SomeTest e ...

  7. Qt对话框的事件循环分析(子线程中不能创建UI窗体分析)

    重要: GUI线程和辅助线程 如前所述,每个程序在启动时都有一个线程.这个线程被称为"主线程"(在Qt应用程序中也称为"GUI线程").Qt GUI必须在这个线 ...

  8. Qt对话框的事件循环分析(子线程中不能创建UI窗体分析2)

    Qt事件机制 QT-UI 后端 重要: GUI线程和辅助线程 如前所述,每个程序在启动时都有一个线程.这个线程被称为"主线程"(在Qt应用程序中也称为"GUI线程&quo ...

  9. python3 线程隔离_Python并发编程之线程中的信息隔离(五)

    大家好,并发编程 进入第三篇. 上班第一天,大家应该比较忙吧.小明也是呢,所以今天的内容也很少.只要几分钟就能学完. 昨天我们说,线程与线程之间要通过消息通信来控制程序的执行. 讲完了消息通信,今天就 ...

  10. C#多线程开发-处理子线程中的异常

    C#多线程开发-处理子线程中的异常 在平时的多线程开发中,对于异常的处理是至关重要的,千万不能马虎.如果在实际的项目中,对于某些线程中的异常没有处理,会直接导致整个程序崩溃,软件无法使用. 其中需要说 ...

最新文章

  1. linux数据库创建score表,MySQL数据库学习笔记
  2. 使用JPA获取Oracle中的日期字段丢失时分秒
  3. android yuv加水印_Android Camera添加预览水印
  4. 自动化测试框架搭建-报告-4
  5. MyBatis(三)——动态SQL
  6. sql分割以逗号隔开的字符串
  7. 记不住ASP.NET页面生命周期的苦恼
  8. jsonp原生js跨域拿新浪数据插件封装【可扩展】
  9. 2018.07.09 顺序对齐(线性dp)
  10. 如何为开源项目做市场
  11. matlab控制读取数小数位,matlab输出的数值型矩阵中如何控制小数位数,以及对齐方式?...
  12. 【家庭网络】申请安装移动宽带过程及简单建议
  13. 工具推荐:最好用的pCap工具
  14. APP赚钱盈利的8大方法
  15. 赵小楼《天道》《遥远的救世主》深度解析(20)(补)肖亚文的不当吃不当喝和丁元英没接受18万马克的补偿
  16. 智利车厘子的尺寸说明,给大家扫盲
  17. 【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法及聚类效果评估
  18. PFO(DMP end capped) cas:195456-48-5聚合物光电材料
  19. 利用python实现简单的人工神经网络识别手写数字
  20. 练习4.圆中四只鸭子在同一个半圆的概率——MATLAB

热门文章

  1. Arduino酸度计(PH计)
  2. PHP 按照字节来分割字符串
  3. Miracast分析
  4. flash动态改变注册点
  5. 函数:写一函数求sinh(x)的值,求sinh(x)的近似公式为: sinh(x) = (ex-e-x)/2 其中用一个函数求ex
  6. About Swift
  7. indesign中调出字符样式快捷键_InDesign的文字快速查找替换编辑技巧介绍(图文)...
  8. trunk口不通防火墙_为何S5700交换机通过trunk直连防火墙USG5500,都互相无法ping通...
  9. 用CSS3制作照片墙
  10. 判断其他应用正在使用录音机——AudioManager