Socket的速率控制

(一)、目标

做一个以精确速率向外输出数据的数据源,要完成这个目标,最基础的是:

1、找到一种精确的计时器,在精确的时间范围内控制数据源以指定的速度向外发送数据。

2、通过对套接字选项和线程优先级的设置减少网络因素对发送速度造成的影响,从而提高发送精度,保证数据的实际发送量尽可能的达到指定的理论发送量。

     针对第一个要求,通过寻找到一种时间精度达到微秒级的精确计数器来保证,在硬件支持的情况下可以通过WindowsAPI获取时钟频率以及震荡次数,通过在事件两端分别调用函数得到震荡次数的差值并结合时钟频率可以计算出精确的时间间隔,通过指定的传输速度和精确的延时可以计算出需要发送的数据量。对于第二个要求通过设置数据源所在线程的优先级,以及对套接字选项的设置来减小协议本身对数据传输的过多控制而造成的时延,从而使实际的数据发送量尽可能的接近理论值。

(一)、设置线程优先级

首先在主函数中创建线程函数DWORDWINAPI ThreadProc(LPVOIDlpParam),在线程函数中实现数据源的功能,线程创建成功后对线程优先级进行设置,windows下对线程优先级进行设置的API函数为BOOLWINAPI SetThreadPriority( __in HANDLE hThread, __in intnPriority),其中nPriority定义了线程的优先级。


线程优先级

标志

优先级值

1

IDLE(最低)

THREAD_PRIORITY_IDLE

如果进程优先级为realtime则调整为16,其他情况为1

2

LOWEST

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值