这是我的线程函数!
UINT CScoreDlg::ProgressThreadFunc2(LPVOID   pParam)   
  {   
  for   (int   i=1;   i   <=   100;   i++)   
  {   
    
  ::PostMessage((HWND)pParam,   WM_USER_THREAD_SETPOS,   i,   0L);   
    
  ::Sleep(10);   
  }   
    
  return   0;   
  }   
   里面已有一个循环,如何将这个循环与我的数据处理循环联系起来?

解决方案 »

  1.   

    不太明白你意思,你把你数据处理放到这个for里不就行了,但是要保证100步完成,如果不能100步,那先要计算出你数据处理的时间长度并换算到100步
      

  2.   

    在线程里面处理数据循环,然后向处理进度指示的窗口发送进度消息(你上面已做)!关键是自定义消息的定义://ProgressDlg.h#define DESTROY  ???
    #define WM_USER_THREAD_SETPOS WM_USER + nclass CProgressDlg
    {
        .........
        afx_msg LRESULT OnUserThreadSetPos(WPALARAM wParam, LPARAM lParam);
    }//ProgressDlg.cpp
    BEGIN_MESSAGE
         ON_MESSAGE(WM_USER_THREAD_SETPOS, OnUserThreadSetPos)
    BEGIN_MESSAGE_ENDLRESULT CProgressDlg::OnUserThreadSetPos(WPALARAM wParam, LPARAM lParam)
    {
        if( wParam == DESTROY )
           DestroyWindow();
        else
           m_ctrlProgress.SetPos(wParam);    return 0l;
    }这是你的线程函数!
    UINT CScoreDlg::ProgressThreadFunc2(LPVOID   pParam)   
    {   
        for   (int   i=1;   i   <=   100;   i++)   
        {   
            DataTreat();//数据处理实体
            ::PostMessage((HWND)pParam,   WM_USER_THREAD_SETPOS,   i,   0L);   
        
         }   
        ::PostMessage((HWND)pParam,   WM_USER_THREAD_SETPOS,   DESTROY,   0L);     return   0;   
    }   
      

  3.   

    #define DESTROY  ???
    后面有三个问号是什么意思?
      

  4.   

    #define DESTROY  ???把???改成-1好了,没什么意思,就是wParam=-1结束窗口,当循环结束时wParam等于-1
      

  5.   

    我将我的数据处理函数COPY放到线程里,提示出错!
    error C2227: left of '->adoEOF' must point to class/struct/union