如何避免连续生成4个小于50ms的随机延迟?代码求助
解决连续4个小于50ms随机延迟的问题
首先得指出你现有代码里的几个核心问题,这也是导致脚本跑不起来或者功能失效的原因:
- 循环逻辑混乱:你手动控制
i的增减和重置,比如当total >50时把i重置为0,这很容易导致死循环,永远无法退出循环;而且totaldelay和total变量名不一致,会引发逻辑错误。 - 思路偏差:你似乎在计算两个延迟的总和,但需求是单个延迟连续4次小于50ms,第四个必须≥50ms,所以应该跟踪的是连续小于50ms的次数,而不是延迟总和。
正确的实现思路
我们需要维护一个计数器,记录当前连续生成的小于50ms延迟的次数:
- 初始化计数器
consecutiveLow = 0 - 每次生成延迟前,判断计数器:
- 如果
consecutiveLow == 3(已经连续3个小于50ms),那么强制生成50-100ms的延迟 - 否则,正常生成20-100ms的随机延迟
- 如果
- 生成延迟后,更新计数器:
- 如果当前延迟 <50ms,
consecutiveLow +=1 - 否则,把
consecutiveLow重置为0
- 如果当前延迟 <50ms,
修正后的代码示例
int consecutiveLow = 0; // 生成4个延迟的示例(如果需要持续生成可以改成无限循环) for (int i = 0; i < 4; i++) { int delay; if (consecutiveLow == 3) { // 第4个必须≥50ms,锁定50-100ms范围 delay = RandomInt(50, 100); } else { // 正常生成20-100ms的随机延迟 delay = RandomInt(20, 100); } // 这里可以添加对生成延迟的使用逻辑,比如执行延迟操作 printf("生成的延迟:%d ms\n", delay); // 更新连续低延迟计数器 if (delay < 50) { consecutiveLow++; } else { consecutiveLow = 0; } }
逻辑说明
- 这个逻辑不仅能解决你当前生成4个延迟的需求,还能无缝扩展到持续生成延迟的场景——只要连续3个都是低延迟,下一个就强制生成高延迟,从根本上避免连续4个低延迟出现。
- 相比你原来的循环,这个实现逻辑清晰,不会出现死循环,变量统一,也更容易维护和调试。
内容的提问来源于stack exchange,提问作者user12241227
相关产品推荐
相关产品推荐

