用户界面线程实现

用户界面线程实现的技巧

1.问题阐述

MFC中有两类线程,分别称为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。

工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务。

2.实现技巧

当一个Windows应用程序运行时,它会自动产生一个主线程,一般的窗口处理等都由该主线程处理,在主线程中可以创建和使用其他线程。用户界面线程通常用于处理用户输入并响应各种事件和消息。

启用用户界面线程的函数AfxBeginThread()与启用工作线程的函数是同一个函数的不同重载形式,该函数的声明如下:

 CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);

pParam:传递给线程函数的一个32位参数,执行函数将用某种方式解释该值。它可以是数值,或指向一个结构的指针,甚至可以被忽略。
 
nPriority:线程的优先级。如果为0,则线程与其父线程具有相同的优先级。
 
nStackSize:线程为自己分配堆栈的大小,其单位为字节。如果nStackSize被设为0,则线程的堆栈被设置成与父线程堆栈大小相同。
 
dwCreateFlags:如果为0,则线程在创建后立刻开始执行;如果为CREATE_ SUSPEND,则线程在创建后立刻被挂起。
 
lpSecurityAttrs:线程的安全属性指针,一般为NULL。

3.实例代码

BOOL CMyThread::InitInstance()
{
GetMainWnd()->SetWindowText("从线程中设置标题栏文字");
return TRUE;
}
// CTestView 消息处理程序
#include"MyThread.h"
void CTestView::OnRButtonDown(UINT nFlags, CPoint point)

CMyThread *pThread;
pThread=(CMyThread*)AfxBeginThread(RUNTIME_CLASS(CMyThread));
CView::OnRButtonDown(nFlags, point);
}

4.小结

在Visual C++ 6.0编程环境中,我们既可以编写C风格的32位Win32应用程序,也可以利用MFC类库编写C++风格的应用程序,二者各有其优缺点。基于Win32的应用程序执行代码小巧,运行效率高,但要求程序员编写的代码较多,且需要管理系统提供给程序所有资源;而基于MFC类库的应用程序可以快速建立起应用程序,类库为程序员提供了大量的封装类,而且Developer Studio为程序员提供了一些工具来管理用户源程序,其缺点是类库代码很庞大。由于使用类库所带来的快速、简捷和功能强大等优越性,因此除非有特殊的需要,否则Visual C++推荐使用MFC类库进行程序开发。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值