不解!
用多线程做了一个类似赛跑的小游戏。
使4个image作直线运动。
其中每次循环用random(2)来确定前进的距离。
但是奇怪的是结果至少有95%的机率是1号image得第四名。而且经常都是其它三个到了终点,1号还没走一半的距离。
后来我把循环的速度放得很慢,就是在每次循环中加了for j:=0 to 1000000 do begin end;这样的空循环。这样四个的速度就比较平均了,出来的结果也比较随机。这是什么原因?
书上有说多线程在windows95上进行的话效益会明显降低。我现在的系统是winme,是不是跟这个有关系?

解决方案 »

  1.   

    你在调用random之前调用了Randomize没有?
      

  2.   

    你在调用random之前调了Randomize没有?
      

  3.   

    你每次用random前先randomize可能会好一些
      

  4.   

    用randomize ?这个怎么用?我刚学delphi不太懂
    我是用这样的让image动的
    form1.Image2.Left:=form1.Image2.Left+random(2)
      

  5.   

    Randomize用于产生一个随机种子
    随机函数从这个种子开始产生随机数
    通常Randomize会调用系统时间来进行初始化
    如果不调用Randomize的话,没次随机种子将会保持不变
    这便是你程序结果的原因
      

  6.   

    randomize;
    form1.Image2.Left:=form1.Image2.Left+random(2)是这样用吗?
    可是结果还是一样。
    而且我上面有说过,循环的速度放得很慢的时候,就是在每次循环中多加了for j:=0 to 1000000 do begin end;这样的空循环。使程序运行慢了下来。这样出来的结果就比较随机了。
    还有一点,如果上面的空循环比较小的话,比如for j:=0 to 1000 do begin end;或者干脆不用的话。出现的结果几乎都是,4,1,2,3。