实例学MFC(1)--线程
来源:互联网 发布:waypoint.js 编辑:程序博客网 时间:2024/05/15 00:30
通过实例我们来看看,MFC到底有多简单。
我们将要实现的例子是,在窗口中显示现在的时间,并实时更新。
我们是行动主义者,废话不多说,开始动手吧。
在VC6.0中,根据向导,建立一个MFC项目(exe,对话框式)。
给窗体添加一个EditBox,ID为IDC_TIME,显示时间用的。
双击OK按钮,建立OnOK()函数。
HANDLE hThread;
DWORD ThreadID;
DWORD ThreadID;
void CThreadDlg::OnOK()
...{
// TODO:
...{
// TODO:
Sleep(2000);
MessageBox("线程即将运行!","对话框的题目",MB_OK);
hThread=CreateThread( //hThread变量保存线程句柄,我们需要在头文件中添加
NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadFunc, //ThreadFunc这个函数,待会我们再创建。
NULL,
0,
&ThreadID); //ThreadID 线程的ID,也需要在头文件中追加
//CDialog::OnOK(); 这句是自动生成的,注释掉。
}
当点击OK按钮的时候,就启动线程。
然后就是在线程中实行的函数。这个函数需要放在OnOK前面,否则会出现没有定义的错误。
void ThreadFunc(int int_param)
...{
CTime time;
CString strTime;
while(TRUE)
...{
time=CTime::GetCurrentTime(); //取得现在的时间
strTime=time.Format("%H:%M:%S");
::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime); //显示时间
Sleep(1000); //每秒更新一次
}
}
...{
CTime time;
CString strTime;
while(TRUE)
...{
time=CTime::GetCurrentTime(); //取得现在的时间
strTime=time.Format("%H:%M:%S");
::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime); //显示时间
Sleep(1000); //每秒更新一次
}
}
OK!现在你可以编译运行一下,慢慢欣赏你的成果吧。
我们已经实现了我们要做的事情,但是为了让我们的工作看上去更专业些,我们需要润色润色。
我们需要做两件事情。
首先把我们的定义写到头文件中。
第二我们启动了线程,当然我们也必要能够终止线程,否则退出程序,线程还没终止,会有预想不到的后果。
我们在头文件中把定义加上
protected:
HICON m_hIcon;
HANDLE hThread; //加上
DWORD ThreadID; //加上
volatile BOOL m_bEndTread; // 用于控制线程的终止
void ThreadFunc(int int_param); //在这里定义了,就不用非要写在OnOk函数前头了
HICON m_hIcon;
HANDLE hThread; //加上
DWORD ThreadID; //加上
volatile BOOL m_bEndTread; // 用于控制线程的终止
void ThreadFunc(int int_param); //在这里定义了,就不用非要写在OnOk函数前头了
然后我们把的
while(TRUE)
改成
m_bEndTread = FALSE
while(!m_bEndTread)
让程序退出时,线程结束:双节Cancel按钮,添加OnCancel()函数
void CThreadDlg::OnCancel()
...{
// TODO:
m_bEndThread = TRUE; //结束线程
MessageBox("ByeBye","",MB_OKCANCEL);
CDialog::OnCancel();
}
...{
// TODO:
m_bEndThread = TRUE; //结束线程
MessageBox("ByeBye","",MB_OKCANCEL);
CDialog::OnCancel();
}
OK。这样子,我们的作品就有点薘人的味道了。
- 实例学MFC(1)--线程
- 实例学MFC(2)--线程间的通信之消息与事件
- MFC 工作者线程实例(图)
- 在MFC里面实现线程的实例
- 在MFC里面实现线程的实例
- MFC中用户界面线程和工作者线程的编程实例
- 线程:实例1
- android 线程实例1
- MFC实例学习(1)----状态栏
- MFC用户界面多线程实例1
- MFC--线程
- MFC线程
- MFC线程
- MFC 线程
- MFC 线程
- [MFC]MFC线程
- 二十一天学通VC++之MFC线程处理概述
- [每日一学]MFC学习笔记——线程中控制窗口内容
- j2me环境搭建与配置(之eclipse)
- API入门教程
- dnn Skin Objects(stored in the ModuleControls database table)
- 获取类所在的classpath绝对路径
- JasperForge小试身手
- 实例学MFC(1)--线程
- ajax跨域调用webservice
- SQL 查找重复记录
- sotower平台体验(一)SoTower WEB组件
- 标准模板库(STL)介绍(上)
- IE的抱怨,FireFox 的羡慕
- QQ安装时会捆绑Silverlight
- 使用C#实现远程线程插入.
- 通过JDBC连接oracle数据库的十大技巧