`
huobengle
  • 浏览: 862296 次
文章分类
社区版块
存档分类
最新评论

用户界面线程简单学习

 
阅读更多
通常把用于处理用户输入、响应事件和消息的线程称为用户界面线程,而那些不与用户界面作任何交互活动的线程称为工作者线程。


界面线程包含一个消息循环,并关联一个主窗口。消息循环为主窗口及其子窗口分发消息,进行消息驱动。从而,主窗口可以可以响应用户的交互操作以及其他的系统事件。



要创建一个用户界面线程,必须要:
·重载CWinThread类,建立自己的线程类。
·建立自己的窗口类,以作为界面线程的主窗口。
·重载线程类的InitInstance函数,并在其中注册自己的窗口类,创建线程主窗口。
·在InitInstance函数的最后 return TRUE; 以进入消息循环。
启动一个用户界面函数,通常使用AfxBeginThread(RUNTIME_CLASS(线程类名)),请注意与工作者线程的不同之处。
结束一个用户界面函数,可以通过向线程主窗口发送WM_DESTROY消息。

其他的工作,就是在线程主窗口内的事情了。

实例操作:
1.创建MFC对话框程序,添加一个启动用户界面线程的按钮
2.向程序中添加一个对话框,并建立相应的对话框类CThreadDlg,该对话框将被作为用户界面线程的主窗口。
3.向程序中添加一个以CWinThread为基类的新类CUIThread,该类用于启动一个用户界面线程。
4.在UIThread.cpp中加入#include "ThreadDlg.h",并在CUIThread::InitInstance()中加入
  CThreadDlg dlg;
  m_pMainWnd=&dlg;
  dlg.DoModal();
  确保InitInstance函数最后return TRUE;
5.CMyThread::InitInstance()中创建的CThreadDlg将与主窗口在独立的线程中运行,可以在CThreadDlg中加入各种执行耗时任务的代码而不会影响主窗口的运行。
6.在主窗口的**dlg.h加入#include "UIThread.h",双击按钮添加CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));开启线程。



注意
■ 工作者线程倾向于琐碎的处理,与它不同的是,用户界面线程具有自己的界面而且实际上类似于运行其他应用程序。创建线程而不是其他应用程序的好处是线程可与应用程序共享程序空间,这样可以简化线程与应用程序共享数据的功能。
■ 典型情况是用户界面线程用于完成查询和替换等功能,或者是其他不希望占用主应用程序大量处理时间但是需要一个界面的功能或服务,或者用户也可完全不考虑界面,将这种类型的线程用于窗口消息服务器作为一种传递其消息的方式,以避免使自己因占用处理时间过多而陷入困境。
■ 在时间要求严格的应用程序(例如实时应用程序)中,不希望因为工作者线程启动而等待,这时可将工作者线程中的控制逻辑内置到用户界面线程中并提前创建线程。当需要处理事务时,向用户界面线程发送消息,此时用户界面线程已经运行并且在等待指令。
分享到:
评论

相关推荐

    线程学习资料,thread

    学习线程的入门级资料,用户界面线程和工作者线程的创建和利用方法,简单的线程间同步方法,包括全局变量和CMutex等

    Java毕业设计-Java多线程与线程安全实践-基于Http协议的断点续传.rar

    4. 用户界面:项目提供了一个简单的图形用户界面,用户可以输入下载链接、设置线程数量、开始、暂停和取消下载等操作。 5. 日志记录:项目使用了日志框架(如Log4j)来记录下载过程中的关键信息,便于分析和调试。 ...

    基于Java C/S模式的简单学生管理系统

    一个用java编写的c/s模式的学生管理系统,不过没有加入管理员功能。只能算是一个大概的演示版。供学习之用。望高手指导

    java简单计算器开发GUI图形化界面设计与实现(项目源码+课程设计报告)

    学习异常处理、线程、图形用户界面设计、 网络通信等内容。使学生的专业知识进一步完善和丰富,为将来的开发和研究工 作打下一定的基础。 1.2. 课程任务 (1) 巩固和加深学生对 Java 语言课程的基本知识的理解和...

    dlib-18.1 各种数据处理 学习的c++源代码

    5.图形用户界面:提供线程安全的GUI API 6.数值算法:矩阵、大整数、随机数运算等 7.机器学习算法: 8.图形模型算法: 9.图像处理:支持读写Windows BMP文件,不同类型色彩转换 10.数据压缩和完整性算法:CRC32...

    TCP多线程服务器-客户端聊天室(控制台版)

    基础的基于TCP协议多线程服务器-客户端聊天室,无图形化界面,纯控制台输入输出内容,实现聊天室群聊、私聊功能,服务端部分配备简单日志输出,注释齐全,适合开发者新手学习使用!详细内容请移步我的博客查看...

    example-multithreading:简单的多线程示例

    示例多线程 简单的多线程示例 这只是多线程应用程序的一个简单示例。... 在程序中,将文件下载分配给单独的线程是有意义的,同时继续在另一个线程上呈现 GUI,这样您的用户界面就不会在等待文件下载时完全冻结。 很酷的

    开源的VC6.0多线程FTP客户端源代码.rar

    与大家分享一款开源的VC6.0多线程FTP客户端源代码,看界面有些简单的FTP用户端程序,不过编写时候采用了多线程技术,肯定要比单线程的效率更高。下载源码包后,请参考源码包中的FTPDLG.CPP文件,主要代码就在这里,...

    JAVA基础知识课件 适合初学者

    ch8-1 基于Swing的图形用户界面 ch8-2 基于Swing的图形用户界面 ch9 Applet与图形处理 ch10 多线程 ch11 JDBC与数据库访问 ch12 Java网络编程 看完受益匪浅,对JAVA有新认识,大学生期末考试可90+

    Java并发编程(学习笔记).xmind

    (4)用户界面具备更短的响应时间:现代GUI框架中大都使用一个事件分发线程(类似于中断响应函数)来替代主事件循环,当用户界面用有事件发生时,在事件线程中将调用对应的事件处理函数(类似于中断处理函数) ...

    java写的ftp客户端源码

    java写的ftp客户端源码,很久之前了,用的是apache的net包里面的ftp功能,然后自己做了一些swing的操作界面,...源码里面有Test类,因为是为了学习swing mvc才打算做一个的,简单考虑了一下多线程,仅供大家学习参考。

    python学习

    电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。 除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。 11.概括: Python确实是...

    VisualBasic语言教程&案例&相关项目资源

    随着学习的深入,教程还会介绍更高级的主题,如面向对象编程、事件驱动编程、数据库访问、图形用户界面设计等。Visual Basic的主要特点包括自动内存管理、异常处理、动态类型、多线程、网络访问等,使得开发者能够更...

    Dlib通用库

    5.图形用户界面:提供线程安全的GUI API 6.数值算法:矩阵、大整数、随机数运算等 7.机器学习算法: 8.图形模型算法: 9.图像处理:支持读写Windows BMP文件,不同类型色彩转换 10.数据压缩和完整性算法:CRC32...

    dlib-18.2.zip

    5.图形用户界面:提供线程安全的GUI API 6.数值算法:矩阵、大整数、随机数运算等 7.机器学习算法: 8.图形模型算法: 9.图像处理:支持读写Windows BMP文件,不同类型色彩转换 10.数据压缩和完整性算法:CRC32...

    dlib-18.13

    5.图形用户界面:提供线程安全的GUI API 6.数值算法:矩阵、大整数、随机数运算等 7.机器学习算法: 8.图形模型算法: 9.图像处理:支持读写Windows BMP文件,不同类型色彩转换 10.数据压缩和完整性算法:CRC32...

    java写的一个简单基于tcp协议的多用户聊天系统

    用j2se写的一个简单的聊天系统,写了客户端和服务器。用到了socket,流读写技术,服务器端采用了多线程等技术。基本上涵盖了j2se中所有学到的技术,非常适合学习了j2se的初学者练习使用。

    《Java语言程序设计》电子课件

    第 4 章 图形用户界面设计 第 5 章 Java swing基础 第 6 章 Java图形与数字图像处理 第7章 多线程与异常处理 第8章 输入输出流 第9章 网络通信 第10章Java数据库连接 第11章常见数据结构及算法分析 第12章J2ME...

    Java基础课程全套课件.zip

    全面的覆盖:这个压缩包内的课程涵盖了Java编程的各个方面,从基础的语法和数据类型到高级主题如多线程、网络编程、图形用户界面(GUI)开发等。无论您是初学者还是想深入Java编程的专业人员,这里都有适合您的内容...

Global site tag (gtag.js) - Google Analytics