MFC创建UI线程

ref : http://www.qingfengju.com/article.asp?id=113

UI  线程 是由 CWinThread 派生类控制的,这个派生类和 CWinApp 极为类似,实际上 CWinApp 也是一个UI线程,他是应用程序的 主线程 ,一般我们所说的 UI 线程,是指除 主线程 之外的 界面 线程。
 
具体创建方法: 
1.创建一个 CWinThread 的派生类CUiTread2
2.在CUiTread2类的 InitInstance 函数中建立自己的界面,注意必须设置 CWinThread 类的m_pMainWnd成员,否则这个线程不会随着界面的关闭而退出。
3.启动该线程:
     CWinThread  *  pTread  =  AfxBeginThread  (  RUNTIME_CLASS  (  CUiTread2  ));
 
关于线程的退出:
当关闭窗口的时候,CWnd::OnNcDestroy会自动给线程发送WM_QUIT消息,这个时候线程会退出。

//

CWinThread 类是 MFC 用来封装线程的,包括 UI 线程和工作者线程。因此每个 MFC 程序至少使用一个CWinThread 派生类。被 MFC 程序员熟知的 CWinApp 应用类就从这里派生。

用户界面线程通常用于处理用户输入和响应用户事件,这些行为独立于执行该应用程序其他部分的线程。已经创建并启动主应用程序线程(在 CWinApp 导出的类中提供)。本文描述创建其他用户界面线程所需的步骤。

创建用户界面线程时,必须首先从 CWinThread 派生类。必须使用 DECLARE_DYNCREATE IMPLEMENT_DYNCREATE 宏声明并实现此类 。此类必须重写某些函数,也可以重写其他函数。下表列出了这些函数及其用途。

创建用户界面线程时要重写的函数

函数

用途

ExitInstance

线程终止时执行清除。通常重写。

InitInstance

执行线程实例初始化。必须重写。

OnIdle

执行线程特定的闲置时间处理。通常不重写。

PreTranslateMessage

将消息调度到 TranslateMessage DispatchMessage 之前对其进行筛选。通常不重写。

ProcessWndProcException

截获由线程的消息和命令处理程序引发的未处理异常。通常不重写。

Run

class CSerialFun : public CWinThread

{

       DECLARE_DYNCREATE(CSerialFun)

protected:

       CSerialFun();                                                          // 动态创建所使用的受保护的构造函数

       ~CSerialFun();//virtual ~CSerialFun();

public:

       virtual BOOL InitInstance();

       virtual int ExitInstance();

       LRESULT SCANTIMEOUT()      ;                                                                     // 检测 UB 当前是否处理指令超时,以此来判断是 UB 否未处理信息

       int PACKFingerBH( char *p_roomAddress);                                                 // 检测数据库 检测指定 UB 上已有的指纹

      

public:

       CLBFunction LogicFunction;

       HWND HaimDlg;

       CArray <char* ,char*> m_LbAdrArry;                                                  //LB 地址队列

       CList<ipType> m_DictateArry;                                                             // 命令链表

       CList<ipType> m_AckingArry;                                                                    // 等待回码命令链表

       int m_lbNow;                                                                                     // 控制访问 which LB 缓存空闲

      

       CDataOperation *p_DataOperation ;                                                      // 数据处理层

       CMap<int, int, int, int> lbBufsMap;                                                      // 哈希表,存储 LB 的空余缓存数

protected:

       DECLARE_MESSAGE_MAP()

};

AfxBeginThread 为您完成大部分工作。它创建类的新对象、使用您提供的信息初始化该对象并调用CWinThread::CreateThread 开始执行线程。在整个过程中进行检查,确保假如创建过程的任何部分出现故障,所有对象都能被正确地解除分配。


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值