创建用户界面线程
来源:互联网 发布:优化系统 编辑:程序博客网 时间:2024/05/21 22:37
与工作者线程不同的是,用户界面线程通常用于处理用户的输入,响应用户产生的消息。为了建立一个用户界面线程,需要从CWinThread引出自定义的类,并将该类的运行时信息传给用户界面形式的AfxBeginThread函数,以便创建用户界面线程。
一般来说,用户界面线程的创建过程需要先从基类CWinThread中派生出用户自定义的新类,再使用AfxBeginThread函数创建线程。
【范例17-1】下面将通过一个实例来讲述如何创建一个用户界面线程。该实例实现创建一个独立于应用程序的窗口,其具体操作步骤如下所述。
打开工作区的【ResourceView】选项卡,修改MFC应用程序向导自动生成的菜单资源。在原菜单基础上再添加一个弹出式菜单“线程”。在其下面添加菜单项“用户界面线程”,设置其ID为ID_THREAD_GUI,如图17-3所示。
单击【OK】按钮后即创建了CWinThread类的派生类MyThread。此时读者在工作台的【FileView】标签中找到MyThread.h文件,打开后可看到如下的类定义。
// MyThread thread
class MyThread : public CWinThread
{
protected:
};
说明:代码中使用了DECLARE_DYNCREATE宏,使用该宏表明MyThread类具有动态创建的能力。使用DECLARE_MESSAGE_MAP宏表明具有消息映射,可以处理命令消息。
再打开MyThread类的实现文件(MyThread.cpp)。下面列出其中一部分代码。
// MyThread
IMPLEMENT_DYNCREATE(MyThread, CWinThread)
MyThread::MyThread()
{
}
……
BEGIN_MESSAGE_MAP(MyThread, CWinThread)
END_MESSAGE_MAP()
提 示:代码中使用了IMPLEMENT_DYNCREATE宏是和头文件中DECLARE_ DYNCREATE宏相对应的,其保证新建的类具有动态创建的能力。而BEGIN_MESSA GE_MAP和END_MESSAGE_MAP宏是和头文件中DECLARE_MESSAGE_MAP宏相对应的,使类具有消息映射机制。
示例代码17-1
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
void CMyView::OnThreadGui()
{
}
代码中又用到了AfxBeginThread函数,但是创建工作者线程和创建用户界面线程的AfxBeginThread函数的形式是有一定区别的。在这段代码里,用的是创建用户界面线程的AfxBeginThread函数。
警告:因为在视图类CMyView中用到了新建的线程类MyThread。因此,最后不要忘记在CMyView类中包含MyThread类的头文件。具体代码如下:
#include "MyThread.h"
【运行结果】在Visual C++ 6.0中编译后无错误,使用快捷键【Ctrl+F5】运行该工程。
【代 码解析】在上述代码中,第4行首先构造了一个框架窗口对象。然后在第5~10行调用其成员函数CreateEx来产生窗口。最后将窗口显示出来。如果用户 界面线程正常执行时,就会产生一个标题为“用户界面线程示例”的窗口。读者可以发现,新建的用户界面线程窗口显示在屏幕上。
说明:需要读者了解的是,这个线程窗口不属于创建线程程序的主框架窗口,而是和主框架窗口(也可以说是主线程窗口)并列的。两者的父窗口都是系统的桌面。查看桌面底部的Windows系统任务栏就会发现,除了创建线程应用程序窗口,也有单独的用户界面线程窗口。
此 时,这两个窗口可以并行工作,互不影响。用户可以单独关闭子窗口用户界面线程窗口,就相当于正常退出了该子线程窗口,不会对主线程创建进程窗口造成影响。 反过来,如果用户关闭主线程窗口,则用户界面线程窗口也会被迫关闭。这种情况属于用户界面线程非正常退出,会造成内存泄漏。
- 创建用户界面线程
- 多线程-----创建用户界面线程
- 创建用户界面线程
- MFC创建用户界面线程
- 创建用户界面线程
- AfxBeginThread创建用户界面线程
- MFC创建用户界面线程
- 多线程处理:创建用户界面线程
- 02创建MFC用户界面线程
- MFC 多线程 用户界面线程创建
- 用线程创建有响应的用户界面
- 工作线程与用户界面线程|多线程之创建工作者线程和用户界面线程区别
- 多线程之创建工作者线程和用户界面线程区别
- 多线程之创建工作者线程和用户界面线程区别
- 多线程之创建工作者线程和用户界面线程区别
- MFC多线程的创建,包括工作线程和用户界面线程
- MFC多线程的创建,包括工作线程和用户界面线程
- MFC多线程的创建,包括工作线程和用户界面线程
- 浅谈C++中的特殊函数初始化
- Redis和Memcache的区别总结
- 百度地图坐标转换Web服务跨域请求
- [CAQ5]使用okhttp等三方网络框架的时候出现超时错误
- Ext.js5的小部件表格(23)
- 创建用户界面线程
- Tips about how to do mornings
- Ubuntu 14.04下安装GitLab指南
- 机器学习入门阶段程序员易犯的5个错误
- Unicode字符集和多字节字符集关系
- 同步和异步的概念
- 第2章 活动的生命周期
- 探寻main函数的标准写法,以及获取main函数的参数、返回值
- linux编程之GDB调试