MFC使用多线程时请谨慎使用srand()来产生随机数 .
来源:互联网 发布:mac自动登录 编辑:程序博客网 时间:2024/04/29 05:38
实现的功能:基于基本对话框,按下开始按钮后,在对话框内随机绘制若干图片,按下停止按钮后,停止绘制图片。
由于在绘制图片的时候还需要响应按钮消息,所以我用了一个线程去实现绘制图片这部分功能
线程代码如下:
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循环里面,但是每一次执行的时间都是不同,这也就导致了每次产生的随机数也是不同的。
- MFC使用多线程时请谨慎使用srand()来产生随机数
- MFC使用多线程时请谨慎使用srand()来产生随机数 .
- 使用rand()与srand()产生随机数
- 产生随机数 rand() 和 srand() 函数的使用
- C/C++使用rand()和srand()函数产生随机数
- rand srand产生随机数
- 1.(c语言)产生随机数(rand()和srand()的配合使用)
- 产生随机数————srand函数与rand函数的使用
- rand 和 srand产生随机数
- 1. srand rand 随机数产生
- rand 和 srand产生随机数
- srand (seed) rand() 产生随机数
- rand(),srand()产生随机数
- rand(),srand()产生随机数
- rand(),srand()产生随机数
- srand()和rand()产生随机数
- 使用sys_guid产生随机数
- 谨慎使用多线程中的fork
- 本地计算机上的OracleOraDb10g_home1TNSListener 服务启动又停止了
- 精确延时函数DelayTime .
- 转一个订票系统的涉及方案,对系统处理并发有帮助
- 破解本地mysql用户名与密码
- WinSock服务器设计的四个关键问题
- MFC使用多线程时请谨慎使用srand()来产生随机数 .
- 使用Windows提供dll实现MD5加密
- 用 SQL 语句创建数据库用户(SQL Server 2005)(
- Radi html5 editor
- 联通iPhone 4S如无意外本月上市,7LI
- 雅虎北京研究院
- activity启动的简要介绍
- 常见Web技术之间的关系,你了解多少?
- 【配置文件】ActionMapping