我在代码中写了一个线程函数
static UINT MyThreadFun()
{......
   printf("%d",rand());
   Sleep(500);
  ......
}
OnBtnDown()函数产生10个线程,代码如下:
OnBtnDown()
{.....
  srand( (unsigned)GetTickCount() );
  for(i=0;i<10;i++)
  {
    m_pManageLostThread=
      AfxBeginThread(CUdpThread::MyThreadFun,                  (LPVOID)(this),THREAD_PRIORITY_NORMAL,  0,CREATE_SUSPENDED,NULL) ) ;            m_pManageLostThread->ResumeThread();
  }
......
}
发现每次连续产生的随机数都是10个一组,
我希望每个线程产生的随机数都不同,?
请大侠指点,谢谢!

解决方案 »

  1.   

    设一个static 的变量,让他rand不就可以了?!
      

  2.   

    在rand()前调用
    srand( (unsigned)time( NULL ) );
    就可以了
      

  3.   

    可用srand( (unsigned)time( NULL ) );种子是以秒区分
    或者srand(Gettickcount);得到的是一毫秒区分
    每个线程运行可能是毫秒级,随机数还是有很大可能相同,
    有没什么办法得到更精确的时间。
      

  4.   

    给MyThreadFun()函数加一个int变量,这个变量在创建线程前取一个随机数,在各个线程中取模不就可以了。
      

  5.   

    如果你想精度很高,用这个CoCreateGuid(),据说产生出来的是全球唯一,:)
      

  6.   

    我也碰到这个问题,不小心就搜到这个帖子了。
    我自己想了个办法,为什么非得得到更加精确的时间呢,换个角度考虑也行啊。就是用“time()*进程ID”做种子,虽然获取的时间是相同的,但是进程ID是唯一的,最后得到的种子也是唯一的。
    srand((int)time(NULL)*(int)tid);
    rand();
    我试过这个方法了,可行