0

我正在制作一个阻塞算法,我刚刚意识到,如果它应该保持精确,那么为这种算法添加超时并不是那么容易。
添加超时意味着,如果不是更早,阻塞算法应该在 X 毫秒之后中止。现在我似乎有两个选择:

  1. 迭代时间(有错误,但很快)
    • 检查阻塞情况
    • 迭代time_elapsed1 (这意味着使用usleep 1e-6 秒)
    • time_elapsed与比较timeout。(这里是我要讲的问题
    • usleep(1)
  2. 每次迭代获取系统时间(缓慢但精确)
    • 知道该怎么做,请不要发布任何关于此的答案。

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。其他用户可能会发现该解决方案对计时以外的其他目的有用。

4

2 回答 2

0

尝试这个:

(int)($time_elapsed*0.001)

这应该快很多

于 2013-04-17T19:21:46.767 回答
0

Maybe this will help Php number format. Though this does cause rounding, if that is unacceptable then I don't think its possible because PHP is loosely typed that you cant define numbers with a particular level of precision.

于 2013-04-17T18:50:45.580 回答