MFC多线程的进度条设计
来源:互联网 发布:启航营销软件 编辑:程序博客网 时间:2024/05/16 06:42
1、很多繁重的任务新建一个线程来做,然后可以做一个worker线程,然后worker来做操作同时来设置主线程的模态对话框的显示。
UINT ProcessDlgFunc(LPVOID in){ if(!in) { return 100; } Sleep(3000); ProcessDlg *dlg = (ProcessDlg *)in; int count = 0; while(count++ <= 100) { dlg->PostMessageW(WM_PROCESS, count); Sleep(500); } dlg->PostMessageW(WM_QUIT); return 200;}void CMFCApplication2View::OnEdit32771(){ // TODO: Add your command handler code here AfxBeginThread(ProcessDlgFunc, dlg); dlg->DoModal();}
这里新线程要做个工作就是,先在domodel之前起来,然后等对话框完成domodel,找个只是一个很粗糙的设计,然后新线程定时给对话框post消息来设置进度,多疑对话框也要完成消息处理:
#define WM_PROCESS (WM_USER + 200)class ProcessDlg : public CDialogEx{DECLARE_DYNAMIC(ProcessDlg)public:ProcessDlg(CWnd* pParent = NULL); // standard constructorvirtual ~ProcessDlg();// Dialog Dataenum { IDD = IDD_DIALOG1 };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV supportDECLARE_MESSAGE_MAP()public: CProgressCtrl m_Process; virtual BOOL OnInitDialog(); afx_msg LRESULT do_process(WPARAM wParam,LPARAM lParam) ;// afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);};IMPLEMENT_DYNAMIC(ProcessDlg, CDialogEx)ProcessDlg::ProcessDlg(CWnd* pParent /*=NULL*/): CDialogEx(ProcessDlg::IDD, pParent){}ProcessDlg::~ProcessDlg(){}void ProcessDlg::DoDataExchange(CDataExchange* pDX){ CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_PROGRESS1, m_Process);}BEGIN_MESSAGE_MAP(ProcessDlg, CDialogEx)// ON_WM_DRAWITEM() ON_MESSAGE(WM_PROCESS, do_process)END_MESSAGE_MAP()LRESULT ProcessDlg::do_process(WPARAM wParam,LPARAM lParam) { //AfxMessageBox(_T("test")); if(wParam >= 0 && wParam <= 100) m_Process.SetPos(wParam); return 0;} // ProcessDlg message handlersBOOL ProcessDlg::OnInitDialog(){ CDialogEx::OnInitDialog(); // TODO: Add extra initialization here m_Process.SetRange(0, 100); m_Process.SetStep(1); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}
2、这种方法并不发消息,而是主备线程之间通过一个全局的值,比如整数,主线程用一个定时器轮训这个值,来设置进度条的进度,而新线程就负责完成后台任务和设置进度给共享值,也是可行的。
- MFC多线程的进度条设计
- MFC多线程控制进度条
- MFC多线程控制进度条
- MFC+多线程+对话框+进度条
- MFC多线程控制进度条
- C#多线程进度条设计
- Win32多线程设计之MFC的多线程
- MFC进度条的美化
- MFC - 进度条的使用
- MFC中的多线程设计
- 多线程进度条的使用
- 深入浅出Win32多线程设计之MFC的多线程
- 深入浅出Win32多线程设计之MFC的多线程
- 深入浅出Win32多线程设计之MFC的多线程(1)
- 深入浅出Win32多线程设计之MFC的多线程(2)
- 深入浅出Win32多线程设计之MFC的多线程(3)
- 深入浅出Win32多线程设计之MFC的多线程(4)
- 深入浅出Win32多线程设计之MFC的多线程(I)
- gabor原子的产生
- ftp操作
- SSIS Foreach 如何限定两种文件扩展名?
- IOS 的loadView 及使用loadView中初始化View注意的问题。(死循环并不可怕)
- Linux中常用的系统监控命令简介(ps , vmstat ,uptime,free,iostat)
- MFC多线程的进度条设计
- 【OpenCV】在没有安装OpenCV的电脑运行OpenCV程序
- Oracle关于Group by合计、小计的使用
- C#窗体应用程序(窗体传值)MDI
- 徒手打造一款PK 名片全能王 的名片识别应用
- 在 Visual C++ 中以错误的顺序链接 CRT 库和 MFC 库时出现 LNK2005 错误
- 深入理解C++中的mutable关键字
- iOS开发问题小结
- socket阻塞与非阻塞、同步与异步,五种I/O模型总结