zoukankan      html  css  js  c++  java
  • 用户界面线程实现

    用户界面线程实现的技巧

    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类库进行程序开发。

    http://blog.csdn.net/lizheng308/article/details/6195438

  • 相关阅读:
    Cisco静态路由
    VTP
    trunk
    vim中文乱码
    Ubuntu 切换root用户是时出现su Authentication failure
    github 换行符自动转换功能
    Qt弹出消息对话框
    串口发送Hex数组
    Qt 按顺序保存多个文件
    Qt乱码解决办法(常量中有换行符)
  • 原文地址:https://www.cnblogs.com/findumars/p/5086784.html
Copyright © 2011-2022 走看看