Closed Qinyongle closed 1 year ago
`CPOST_MAX_TICK - cposhHandlers[i].startTime > cposhHandlers[i].delay ? tick - cposhHandlers[i].startTime >= cposhHandlers[i].delay : CPOST_MAX_TICK - cposhHandlers[i].startTime + tick >= cposhHandlers[i].delay`
这一段,当CPOST_MAX_TICK - cposhHandlers[i].startTime<cposhHandlers[i].delay时后面的CPOST_MAX_TICK - cposhHandlers[i].startTime + tick >= cposhHandlers[i].delay出现了问题。
CPOST_MAX_TICK - cposhHandlers[i].startTime<cposhHandlers[i].delay
CPOST_MAX_TICK - cposhHandlers[i].startTime + tick >= cposhHandlers[i].delay
假设CPOST_MAX_TICK=10,cposhHandlers[i].startTime=8,delay=4。
那么当tick=9的时候,10-8+9>4,返回真。按理来说这时应该返回假吧。
CPOST_MAX_TICK - cposhHandlers[i].startTime + tick >= cposhHandlers[i].delay这一段是不是该替换为(tick>cposhHandlers[i].startTime ? tick-cposhHandlers[i].startTime: CPOST_MAX_TICK - cposhHandlers[i].startTime + tick) >= cposhHandlers[i].delay
(tick>cposhHandlers[i].startTime ? tick-cposhHandlers[i].startTime: CPOST_MAX_TICK - cposhHandlers[i].startTime + tick) >= cposhHandlers[i].delay
这里这个写法是要在实际情况下的一个简化的写法,一般CPOST_MAX_TICK是由芯片架构决定,是size_t表示的最大数,对于32位cpu,这个值是0xFFFFFFFF,如果计算得到的值超过size_t的最大值,值会溢出,从而变成一个小的数字 在这个前提下,考虑你的设定,如果认为CPOST_MAX_TICK等于10,那就是cpu能处理的最大数字为10,此时10-8+9=1
这一段,当
CPOST_MAX_TICK - cposhHandlers[i].startTime<cposhHandlers[i].delay
时后面的CPOST_MAX_TICK - cposhHandlers[i].startTime + tick >= cposhHandlers[i].delay
出现了问题。假设CPOST_MAX_TICK=10,cposhHandlers[i].startTime=8,delay=4。
那么当tick=9的时候,10-8+9>4,返回真。按理来说这时应该返回假吧。
CPOST_MAX_TICK - cposhHandlers[i].startTime + tick >= cposhHandlers[i].delay
这一段是不是该替换为(tick>cposhHandlers[i].startTime ? tick-cposhHandlers[i].startTime: CPOST_MAX_TICK - cposhHandlers[i].startTime + tick) >= cposhHandlers[i].delay