我用SDK写了个小东东,其中用到了计时器和随机数。
先说随机数,函数体是这样的。
int GetRandNumber ( ) {
int rNumber;
srand ( time( NULL ) );
rNumber = rand() % 26;
return rNumber;
}
我想大家一看就懂了,就是求26以内的随机数,我也就不多说了。!以时间做为种子的!
而计时器,每两秒运行一次,每次都调用这个随机数函数。 但不知道为什么,随机数竟然会变得有规律了,求出来的数,比如,4,25,1,7, 4,25,1,7, 4,25,1,7………
倒,竟然这么有规律,这是为什么呀!但我要是把rand() % 26;中的26改成24就没事儿了。或者把计时器改成3.5秒以上也没什么事儿了。 一切就正常了。
这是怎么回事儿, 我必须用rand() % 26;中必须用26,计时器也必须用两秒, 这个问题该怎么解决呢。
srand ( time( NULL ) );
这一句把它放到程序的入口处或初始化函数里,保证他被执行且只被执行一次即可。
不要放在会被多次调用的函数里。
放在初始化函数中,或类的constructors
用SetTimer()每两秒发送一个消息
再rand()就行了
srand ( time( NULL ) );
在程序开始处写一次就行。
注意:这种方法生成的随机数是伪随机数,产生真正的随机数一般都用自然界中真正随机的事来模拟。
自然界中真正随机的事来模拟,是应用比较严格的场合,用硬件来产生,一般用不到。