mfc在多线程中更新进度条进度 详细代码
时间: 2024-02-11 17:05:34 浏览: 425
以下是一个使用 MFC 编写的多线程更新进度条的示例代码,其中使用 PostMessage 函数向主线程发送消息更新进度条的进度:
首先,在主线程中定义一个消息常量:
```cpp
#define WM_UPDATE_PROGRESS_BAR (WM_USER + 1)
```
然后,在主线程中创建一个进度条控件,并启动一个后台线程:
```cpp
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 创建进度条控件
m_progressBar.Create(WS_CHILD | WS_VISIBLE | PBS_SMOOTH, CRect(10, 10, 200, 30), this, IDC_PROGRESS_BAR);
// 启动后台线程
AfxBeginThread(UpdateProgressBarThreadProc, this);
return TRUE;
}
```
在后台线程中,使用 Sleep 函数模拟一些计算任务,并通过 PostMessage 函数向主线程发送消息更新进度条的进度:
```cpp
UINT CMyDialog::UpdateProgressBarThreadProc(LPVOID pParam)
{
CMyDialog* pThis = (CMyDialog*)pParam;
for (int i = 0; i <= 100; i++)
{
// 模拟一些计算任务
Sleep(50);
// 发送消息更新进度条的进度
pThis->PostMessage(WM_UPDATE_PROGRESS_BAR, i, 0);
}
return 0;
}
```
在主线程的消息映射函数中,处理更新进度条的消息:
```cpp
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
ON_MESSAGE(WM_UPDATE_PROGRESS_BAR, OnUpdateProgressBar)
END_MESSAGE_MAP()
LRESULT CMyDialog::OnUpdateProgressBar(WPARAM wParam, LPARAM lParam)
{
int nProgress = (int)wParam;
// 更新进度条的进度
m_progressBar.SetPos(nProgress);
return 0;
}
```
这样,当后台线程发送消息更新进度条的进度时,主线程就会处理这个消息,并更新进度条的进度。
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044736.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)