在一个按钮事件中,创建了一个对话框,对话框上有一个进度条。
然后用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运行
然后用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运行
解决方案 »
- 网上流传甚广的终止子线程方法,原来是错误的!!!
- 简单的图形化编程平台
- 环形队列如何实现动态增长(数组实现)
- 南京科融数据如何啊?
- 怎么让CListCtrl失去焦点后之前选中的那项显示状态不变,还是处于被选中的标志。谢谢!
- 关于list Control的问题,如能解决还可再给分
- 如何提高我这个功能的效率呢?
- 请问哪位大侠做过类似字典压缩的东东? 有源碼尤佳!分不够再加,解决问题高分相赠
- 1>BSCMAKE: error BK1506 : 无法打开文件“.\Release\AudioDlg.sbr”: No such file or direct
- 关于.lib和控件的问题
- static控件中如何实现鼠标左键拖动
- VS2008内存泄露问题
thrdHandle = CreateThread(NULL,0,ThreadProc_Recv,(LPVOID)pRecv,0,&threadRecvId);
让他来控制就肯定没问题了。还有问题,你联系我,晚上我帮你调试下,上次有点误导你了。不好意思。呵呵