当线程建立完毕,发送信号给线程函数进行处理的时候,  我用按钮控件触发线程函数,,当我多次单击或者修改触发时间就会有闪烁,感觉有多个线程在同时操作一个进度条控件,有很强的闪烁感觉,附上代码 求高手直接让他不闪烁
  为什么会这样呢?struct threadInfo
{
int nMilliSecond;
CProgressCtrl* pctrlProgress;
};void CJdtDlg::OnButton1() 
{ pThread=AfxBeginThread(ThreadFunc,&Info);}UINT ThreadFunc(LPVOID lpParam)
{
threadInfo* pInfo=(threadInfo*)lpParam;
for(int x=0;x<100;x++)
{
int nTemp=pInfo->nMilliSecond;

pInfo->pctrlProgress->SetPos(x);

Sleep(nTemp);
}
return 0;
}

解决方案 »

  1.   

    当线程启动时就GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
    线程结束后就GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
      

  2.   

    我也遇到过现象!改成用消息通知看看,或者设置一下重绘函数
    UINT ThreadFunc(LPVOID lpParam)
    {
    threadInfo* pInfo=(threadInfo*)lpParam;
    for(int x=0;x<100;x++)
    {
    int nTemp=pInfo->nMilliSecond;//pInfo->pctrlProgress->SetPos(x);
    pInfo->PostMessage(WM_MYSETPOS,x,0);//然后在窗体类里处理WM_MYSETPOS自定义消息
    Sleep(nTemp);
    }
    return 0;
    }
      

  3.   

    用 GetExitCodeThread 试试判断线程是否存在