用户界面线程简单学习

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


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



要创建一个用户界面线程,必须要:
·重载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));开启线程。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值