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

我已经编写了一个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,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值