MFC 线程内延时问题

在MFC应用程序中,当点击按钮创建线程显示图片时,发现第一张图片和第二张图片之间的间隔正确为50毫秒,但后续图片间隔变为大约1秒。问题可能出在`DelayTime`函数上,导致线程延迟不准确。需检查并优化延迟实现以确保连续显示的图片间隔一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单击按钮后,创建线程
     

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秒左右,很奇怪,不知道是为什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值