//这里有两个参数分别对应于老版本和新版本的文件对话框
//这里将两类版本的文件对话框模板都进行设置
·205 ·
…………………………………………………………Page 217……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
SetTemplate(IDD_MYFILEDIALOG;IDD_MYFILEDIALOG);
}
然后在 ClassWizard 中为 CMyFileDialog 添加 IDC_DEL 控件的 BN_CLICKED 处理函数
OnDel(),代码如下:
void CMyFileDialog::OnDel()
{
// TODO: Add your control notification handler code here
// 提示用户是否删除文件
if (MessageBox(〃确定删除文件?〃;〃提示〃;MB_OKCANCEL)!=IDOK)
{
//不删除文件则退出
return;
}
CFile::Remove(GetPathName()); //删除选定的文件
}
3 .使用重载的文件对话框
创建好 CMyFileDialog 就可以在程序中使用重载后的对话框,使用方法跟普通的文件对
话框类似,代码如下:
CMyFileDialog dlg; //创建 CMyFileDialog 对象
if (dlg。DoModal()==IDOK) //打开对话框
{
…… //进行用户选定文件后的处理
}
这样就能打开如图 8…4 所示的对话框,在选择文件打开的同时还可以通过单击“删除”
按钮删除一个选定的文件,为文件对话框提供了附加的功能。
本小节给出的例子稍加修改就可以添加更多更复杂的功能 。同时 CFileDialog 还提供了一
些虚函数用于自定义处理文件对话框原有控件产生的消息,重载这些函数就可以为
CFileDialog 原有的功能进行重新设计,从而大大提高文件对话框的灵活性。
8。4 本章小结
本章主要介绍了在 MFC 中如何对文件进行读写操作和一些管理操作,主要内容包括以
下几个方面:
o 在文档视图结构中对文档进行串行化;
o 用 CFile 类和相关类对磁盘文件进行读写和管理;
o 文件对话框 CFileDialog 的一些高级使用方法。
总之,文件操作是应用程序保存和使用数据的基本方法 。只有熟练使用本章中介绍的各
种文件操作的类和函数才能在程序中体现出更大的灵活性。
·206 ·
…………………………………………………………Page 218……………………………………………………………
第 9 章 多线程
第 9 章 多线程
本章主要介绍 Windows 操作系统下多线程的基本概念、创建管理线程的方法,以及线程
的同步问题。Windows 提供了大量的线程同步技术,这些技术可以应用于不同的实际情况。
同时,MFC 对线程操作进行了封装,提供了支持线程操作的类库。本章主要讨论这些技术,
并且给出相应的实例。主要包括以下几个方面的内容:
o Windows 下多线程的基本概念;
o 用户界面线程和工作者线程;
o 线程的管理操作;
o 线程的同步;
o 多线程编程实例。
9。1 多线程的基本概念
在 Win32 下,一个应用程序由一个或多个进程组成。一个进程由一个或多个线程以及代
码、数据和其他内存中的程序资源组成。典型的程序资源包括打开的文件、信号量、动态分
配的内存等。线程在进程空间中执行。
线程是操作系统分配处理器时间的最小单位 。每个线程有自己的堆栈,CPU 寄存器,以
及程序入口。每个线程共享所有处理器的资源。
进程中的每个线程都独立执行,不会影响该进程中的其他线程。所有线程共享公共的资
源。因此必须采用信号量或者其他进程间通信方法来调整线程的工作。
9。2 两种重要的线程
Windows 提供了两种线程,用户界面线程和工作者线程。用户界面线程通常用来处理消
息循环、与用户交互,工作者线程用来处理后台的计算。下面分别介绍这两种线程。
9。2。1 用户界面线程
每一个 Windows 应用程序都有一个主线程 。这里的用户界面线程是指用来和用户进行交
互的线程。接收用户传送的数据,并且做出响应。用户界面线程通常包含自己的窗口,有自
己的消息循环,独立于应用程序的其他部分。
创建一个用户界面线程需要首先继承线程类 CWinThread,重载它的成员函数,如表 9…1
所示。最后调用 AfxBeginThread 创建线程对象。
…………………………………………………………Page 219……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
表 9…1 需要重载的 CWinThread 的成员函数
函数名称 作用
InitInstance 线程的初始化,通常需要重载
ExitInstance 释放线程占用的资源,通常需要重载
OnIdle 空闲时间的处理,不一定重载
PreTranslateMessage 过滤消息,不一定重载
ProcessWndProcException 处理线程抛出的意外
Run 线程控制函数,通常不重载
9。2。2 工作者线程
工作者线程通常用来处理后台运行的任务 。在后台任务运行的同时,用户可进行其他操
作,不必等待后台任务的结束 。例如一个三维模型编辑软件,用户要对两个模型做布尔运算。
在进行计算的同时,用户希望可以观察两个模型,对模型进行旋转,缩放的操作。再如文本
浏览软件的打印功能,在打印文本的工程中,用户仍然会继续浏览文本内容。这些都属于工
作者线程。
创建一个工作者线程只需要两个步骤 。首先实现工作者线程的功能函数,然后启动线程
即可。可以调用 Win32 提供的 API 函数 CreateThread 创建一个线程,MFC 对 Win32 的线程
操作做了封装,也可以通过调用 AfxBeginThread 创建一个线程对象 。这些函数及其调用方法
将在下一节详细介绍。
9。3 线程的操作
本小节介绍 Windows 线程的操作方法,包括线程的创建、线程的管理、线程的同步、线
程的终止等。
9。3。1 线程的创建
线程的创建方法有 3 种,分别介绍如下:
1.调用 Win32API 函数 CreateThread 和 CreateRemoteThread
(1)CreateThread
函数 CreateThread 用来创建线程。如果调用成功则返回非 0,否则返回 0 。它的函数原型
如下:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes;
SIZE_T dwStackSize;
LPTHREAD_START_ROUTINE lpStartAddress;
LPVOID lpParameter;
DWORD dwCreationFlags;
·208 ·
…………………………………………………………Page 220……………………………………………………………
第
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 最新章:第214章
- C语言设计
- 作者:谭浩强1 C 语言概述1.1 C语言的发展过程1.2 当代最优秀的程序设计语言1.3 C语言版本1.4 C语言的特点1.5 面向对象的程序设计语言1.6 C和C+1.7 简单的C程序介绍1.8 输入和输出函数1.9 C源程序的结构特点1.10书写程序时应遵循的规则1.11C语言的字符集1.12
- 最新章:第45章
- 设计成婚:不入豪门
- 作者:海未央《设计成婚2:名门新娘》作品介绍《名门新娘》介绍:她是骆家收养的孤女,性格因为受他的影响,变得有些古灵精怪,也懂得是非之分!他说他的一切只为他而努力,可是为什么要拒绝自己呢?什么?没有满十八岁?那今天生日,够十八岁了吧?什么,还太小?太过分了,这不是耍着自己玩吗?嘿嘿,有个邪恶的老师,那
- 最新章:第196章
- 玄学,从入门到放弃
- 《玄学,从入门到放弃》作者:李传言文案:周诣一手拿着卜卦,一手拿着《演员的自我修养,叹息良久。他本是百年前观天占星的玄术师,谁知却一朝重生现代。他只想平淡地生活下去,可天不遂人愿,他注定将在这末法时代掀起波澜!成就一代影帝!谢千仇沉默地看着他…大师,你卦和书都拿倒了#玄学,从入门到放弃,入土,删库跑
- 最新章:第86章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- 要你言听计从
- 作者:决明第一章哈士奇,没有护卫看家的本领,对主人、客人甚至是闯空门的恶人都一样友善,咬着皮球跟小偷一块玩你丢我捡也不用太惊讶,时常被人认为忠诚度不足。贺世祺背靠在冰冷玻璃落地窗前,一整间屋子都是伸手不见五指的黑暗,也好,反正他现在什么也不需要看到,只要耳朵还有听觉就好,顺便听听贴在耳边的手机里还要
- 最新章:第28章