在一个按钮事件中,创建了一个对话框,对话框上有一个进度条。
然后用AfxBeginThread 创建一个线程,线程控制进度条运行。
主线程运行一些耗时的程序,在程序完成后,把进度条设置到最大值,并关闭对话框。小弟第一次接触多线程,请问下面的代码怎么跑不出我需要的结果呢。
先谢谢各位大大的帮忙
 AfxBeginThread(ThreadFunOne, &progressDlg->m_Progress);将第二个参数改为this也不行   CProgressDlg *progressDlg;
 progressDlg = new CProgressDlg;
 progressDlg->Create(IDD_PROGRESS_DLG, NULL);
 progressDlg->ShowWindow(TRUE); 
progressDlg->m_Progress.SetRange(0,1000);
 AfxBeginThread(ThreadFunOne, &progressDlg->m_Progress);   (这里省略了一些计算代码)   CWnd* pRgressDlg = FindWindow(NULL, _T("请耐心等待!"));
 CProgressDlg *progress = (CProgressDlg*)pRgressDlg;
 progress->m_Progress.SetPos(1000);
 Sleep(300);
 ::SendMessage(pRgressDlg->m_hWnd, WM_CLOSE, 0, 0);
线程函数:
UINT ThreadFunOne(LPVOID pParam)
{   
CProgressDlg *pRgressDlg = (CProgressDlg*)pParam;
 
for (int setPos=1; setPos<=1000; setPos+=100)
 {
 Sleep(100);
 ::SendMessage(pRgressDlg->m_hWnd, WM_UPDATE_DLG_POS, setPos, NULL);
 } return 0;
}
消息处理程序:
LRESULT CProgressDlg::OnUpdateProgressPos(WPARAM wParam, LPARAM lprama)
{   
m_Progress.SetPos((int)wParam);  
return 0;
}
线程函数ThreadFunOne ,单步跟踪就只进来了,里面根本没执行,等到主线程都跑完了,才又跳进ThreadFunOne运行

解决方案 »

  1.   

    试试这样写:
    thrdHandle = CreateThread(NULL,0,ThreadProc_Recv,(LPVOID)pRecv,0,&threadRecvId);
      

  2.   

    楼主,就是上次那个帖子吧。我突然想起来,非模态对话框没有自己的消息循环。把消息发到CProgressDlg(这个是非模态窗体吧?)的父窗体。
    让他来控制就肯定没问题了。还有问题,你联系我,晚上我帮你调试下,上次有点误导你了。不好意思。呵呵
      

  3.   

    CProgressDlg 是否接收到WM_UPDATE_DLG_POS消息
      

  4.   

    楼主,可不可以给原代码发我参考啊,我被这个问题困扰着,谢谢![email protected]