本人最近写一个小程序时遇到的问题,纠结了一两天天,最终得以解决,现将相关情况写在下面,希望其他遇到相同情况的同学能少走些弯路。
实现的功能:基于基本对话框,按下开始按钮后,在对话框内随机绘制若干图片,按下停止按钮后,停止绘制图片。
由于在绘制图片的时候还需要响应按钮消息,所以我用了一个线程去实现绘制图片这部分功能
线程代码如下:
Graphics graph(memDC.GetSafeHdc());int m_rand=rand()%pImage->m_ImagePathAry.GetSize();WCHAR* path=(pImage->imagepath+"\\"+pImage->m_ImagePathAry[m_rand]).AllocSysString();Image image(path);graph.DrawImage(&image,0,0,pImage->rc.right-pImage->rc.left,pImage->rc.bottom-pImage->rc.top);pDC->BitBlt(pImag
e->rc.left,pImage->rc.top,pImage->rc.right-pImage->rc.left,pImage->rc.bottom-pImage->rc.top,&memDC,0,0,SRCCOPY); pImage->pWnd->ReleaseDC(pDC);//m_rand++; DelayTime(30);//延时30毫秒}return TRUE;}
线程采用的是工作线程,传入的参数里面有要绘制图片的详细信息。请大家注意红色加粗的部分,srand(time(NULL)),之前我一直是放在whlie循环里面,结果我虽然在线程里面有写了DelayTime(30)(这个函数就是网上有很多的精确延时函数,我博客里面也有转载),但是实际效果上,图片的显示间隔却是1秒(视觉感觉上,大概1秒左右)。
这里面也是我一直不理解的地方,我将srand这段代码放在while循环的外面之后发现程序就可以按照我设定的时间间隔绘图了。这个真的很奇怪,难道是srand这个函数干扰了DelayTime延时精度?
ps:
我Debug的时候一直没有发现错误是因为,srand是以当前时间作为seek的,而在线程里面,虽然是在while循环里面,但是每一次执行的时间都是不同,这也就导致了每次产生的随机数也是不同的。
分享到:
相关推荐
c语言中rand()和srand()产生随机数方法比较,希望对同学有所帮助
用rand()和srand()产生为随机数的方法总结
rand函数不是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 rand()会导致相同的随机数...
利用系统内srand函数,模拟投掷一枚塞子60000次时,各个面出现的次数。
C语言中产生随机数的方法 ……rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,...
C++中rand()和srand()函数的定义和使用
C++代码,适合于新手学习如何产生随机数。
rand()函数会返回一个伪随机数,但是这是通过一种数学公式推算出来的,得到的随机数分布太集中,这时候要使用srand()函数来设定产生随机数的种子,一般采用当前时间作为种子,这样可以得到分布比较均匀的伪随机数。
C++ 创建随机数 srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。
本文档详细叙述了srand 和 rand 函数的使用方法和注意事项
C语言程序设计-编写程序,产生16个随机数到4行4列的数组中,求其主对角线元素之和(提示:产生随机值要用到教材P274“其他实用函数”里的:rand函数,要求包含头文件“stdlib.h”)函数补充说明: ⑴rand( )%a+b:...
srand,rand,随机数,随机产生字符串。
随机数:数学上产生的都是伪随机数,真正的随机数使用物理方法产生的。 随机数种子:随机数的产生是由算术规则产生的,srand(seed)的随机数种子不同,rand()的随机数值就不同,倘若每次的随机数种子一样,则rand()的...
每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)time(NULL)改为srand(TP)(TP为任一常量),则无论何时运行、运行多少次得到...
C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数。 需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time()函数需要引入ctime头文件。 使用rand...
一个简单随机数猜想游戏,就是简单对srand和rand函数用法的应用
C++提供了两个函数,用于返回随机数:rand() 和 srand()
很通俗易懂。望采纳。int i; int inll[10]; srand(time(NULL)); for(i=0;i;i++) { inll[i]=rand()%(99-10+1)+10; cout[i]; }
在vs2005中调用rand,srand生成伪随机数,有例程。
//第二步:使用种子初始化随机数发生器 srand($seed); //第三步:生成指定范围内的随机数 $random =rand(10,40); 您可能感兴趣的文章:PHP生成指定长度随机数最简洁的方法在PHP模板引擎smarty生成随机数