MFC 线程内延时有关问题

MFC 线程内延时问题
单击按钮后,创建线程
 
C/C++ code

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;
}

线程函数
C/C++ code

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;
}

延时函数
C/C++ code

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秒左右,很奇怪,不知道是为什么?

------解决方案--------------------
你是否能确定是绘图循环变成了 1 秒?还是说仅仅是从屏幕上看视觉效果是 1 秒?

我总感觉你这种绘图方法对 DC 的使用有点不对头,有可能不是每次绘图结果都能被眼睛看到。


————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
------解决方案--------------------
把你的延时函数换成这个

C/C++ code

//**************************************
// 延时
//**************************************
void
delay( DWORD times )
{
    DWORD dwStart = GetTickCount();
    DWORD dwEnd = dwStart;
    do
    {
        doevents();
        dwEnd = GetTickCount();
    } while( ( dwEnd - dwStart )  <=  times );
}