• 您的位置我爱Aspx >> VC.Net >> 深度解析MFC线程及机制
  • 深度解析MFC线程及机制

  • 作者:aspxer  来源:internet  日期:2007-5-21 23:48:08  关键字:
  • 深度解析MFC线程及机制

    中,启动一线程有3种方式:

    1.使用MFC中启动一个线程一般使用AfxBeginThread函数;

    2.使用API则使用CreateThread;

    3.就是使用_beginthread和_beginthreadex两个函数。

    使用MFC的AfxBeginThread函数启动一个线程,不管你代入的参数是否是个从CWinThread继承来的线程类还是一以标准的线程函数地址及参数(UINT ThreadProc(LPVOID pParam)的形式),都返回了一CWinThread指针方便了我们使用。但其中的机理没有在哪本书上有人仔细分析过,没办法只好查看MFC源码了。经过分析,现将分析的结果与大家分享。:)

    在CWinThread类中有两个构造函数:

    一为默认的构造,还有一个为一标准线程函数地址和输入参数的构造函数-

    CWinThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam)。当我们使用AfxBeginThread启动一个线程时,无外2种方法:

    1.直接启动已CWinThread为基类的线程类-AfxBeginThread(RUNTIME_CLASS(...),...);

    2.直接启动标准的线程函数-AfxBeginThread((AFX_THREADPROC),LPVOID ,....);

    还有一种方法可能大家不常用,就是以CWinThread继承一线程类,在内存中new,然后调用CWinThread的成员函数CreateThread来启动自身;

    经过我的分析,实际上第1种和第2种方法就是第3中方法的详细化,调用更加灵活,但1、2种比起来要方便些。:)

    实际上AfxBeginThread根据参数实现创建一CWinThread线程:若参数为一标准的线程函数地址,则new一CWinThread对象,以函数地址及参数构造;若参数为一CWinThread继承过来的类则直接调用CRunTimeClass的CreateObject创建一CWinThread对象,以默认参数构造。然后调用CreateThread成员函数,调用不成功便调用Delete(),判断是否设置了自我删除对象(m_bAutoDelete = TRUE),为真则删除自身。

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:时间编码
    下一篇:Effective STL:Item 16:如何将vector和string的数据传给传统的API函数
  • 相关文章