我正在制作一个阻塞算法,我刚刚意识到,如果它应该保持精确,那么为这种算法添加超时并不是那么容易。
添加超时意味着,如果不是更早,阻塞算法应该在 X 毫秒之后中止。现在我似乎有两个选择:
- 迭代时间(有错误,但很快)
- 检查阻塞情况
- 迭代
time_elapsed
1 (这意味着使用usleep 1e-6 秒) time_elapsed
与比较timeout
。(这里是我要讲的问题)usleep(1)
- 每次迭代获取系统时间(缓慢但精确)
- 我知道该怎么做,请不要发布任何关于此的答案。
与timeout
_time_elapsed
这就是困扰我的地方。在休眠 10e-6 秒timeout
时将以毫秒 (10e-3)为单位。usleep
所以 mytime_elapsed
将比 . 精确 1000 倍timeout
。我想截断time_elapsed
(运算等于不除的最后三位floor($time_elapsed/1000)
。除法算法太慢。
概括
我想让我的变量小 1000 倍而不将其除以 1000。我只想摆脱数据。在二进制中我会使用位移运算符,但不知道如何在十进制系统上应用它。
代码示例:
有时,当 SO 上的人无法回答理论问题时,他们真的很渴望代码。这里是:
floor($time_elapsed/1000);
我想用更快的东西替换这段代码。请注意,虽然问题本身充满了超时,但问题标题只是关于 truncating that data。其他用户可能会发现该解决方案对计时以外的其他目的有用。