我是靠谱客的博主 安详苗条,最近开发中收集的这篇文章主要介绍MFC 线程内延时问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

单击按钮后,创建线程
     


void CRandom_CreatDlg::OnButtonStart() 
{
// TODO: Add your control notification handler code here
if (!image.isStart)
{
image.isStart=true;
pThread=AfxBeginThread(ThreadDisplay,&image,THREAD_PRIORITY_NORMAL);
}
else
image.isStart=false;
}

线程函数

UINT ThreadDisplay(LPVOID param)
{
ImageInfo *pImage=(ImageInfo*)param;
if (pImage->m_ImagePathAry.GetSize()==0)
{
return FALSE;
}
while(pImage->isStart)
{   
srand(time(NULL));
        CDC *pDC=pImage->pWnd->GetDC();
Graphics graph(pDC->GetSafeHdc());
int m_rand=rand()%pImage->m_ImagePathAry.GetSize();
WCHAR* path=pImage->m_ImagePathAry[m_rand].AllocSysString();
Image image(path);
graph.DrawImage(&image,pImage->rc.left,pImage->rc.top,pImage->rc.right-pImage->rc.left,pImage->rc.bottom-pImage->rc.top);
DelayTime(50);
}
return TRUE;
}

延时函数

void DelayTime(DWORD dwMilliseconds)
{
LARGE_INTEGER littmp;
LONGLONG lTimeBegin;
LONGLONG lTimeEnd;
double dMinus;
double dFreq;
double dTim;
QueryPerformanceFrequency(&littmp);
dFreq=(double)littmp.QuadPart;
QueryPerformanceCounter(&littmp);
lTimeBegin=littmp.QuadPart;
do 
{
QueryPerformanceCounter(&littmp);
lTimeEnd=littmp.QuadPart;
dMinus=(double)(lTimeEnd-lTimeBegin);
dTim=dMinus/dFreq;
} while (dTim<dwMilliseconds*0.001);
}

现在出现的情况就是,开始线程后,我自己观察了下,大概第一张图片和第二章图片之间的间隔是我设置的50毫秒,之后每张图片的显示都是1秒左右,很奇怪,不知道是为什么?

最后

以上就是安详苗条为你收集整理的MFC 线程内延时问题的全部内容,希望文章能够帮你解决MFC 线程内延时问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部