我想使用timer类的sleep函数,我想用它来使进程在0到1之间的随机时间内休眠。
为了做到这一点,我尝试了:
timer:sleep(random:uniform()).
但是,我收到以下错误消息:
=ERROR REPORT==== 1-Apr-2014::21:39:32 ===
Error in process <0.472.0> with exit value: {timeout_value,[{timer,sleep,1,
[{file,"timer.erl"},{line,152}]},{myModule,myFunction,4,[{file,"myModule.erl"},
{line,46}]}]}
这有什么问题?
另外,由于我有相同流程的多个版本,如何确保每个版本以不同的随机数开头?
答案 0 :(得分:4)
{A1,A2,A3} = now(),
random:seed(A1, A2, A3),
您可以在每个进程启动函数中运行此代码。由于randon种子存储在进程字典中,因此每个进程都有不同的进程字典。你最好为每个过程设置随机种子。
然后你使用uniform() -> float()
来获取0.0
和1.0
之间的随机数,
使用seconds(Seconds) -> MilliSeconds
获取以秒为单位的毫秒数。
调用sleep(Time) -> ok
暂停调用此函数的进程的Time of milliseconds。
答案 1 :(得分:1)
我认为你需要为睡眠功能提供正确的参数。根据{{3}},它需要的时间以毫秒为单位。你给它的结果是seed(),它返回随机数生成器的旧状态。我建议这样做:
random:seed().
timer:sleep(timer:seconds(random:uniform())).
uniform()返回0到1之间的数字,秒()将秒数转换为毫秒
答案 2 :(得分:1)
即使使用timer:seconds
,我也会收到"timeout_value"
错误消息。
这是因为timer:sleep()
需要一个毫秒的整数值而不是一个浮点数。
只需添加round()
就可以了:
timer:sleep(round(timer:seconds(random:uniform())))