AfxBeginThread

调用此函数以创建新线程。

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

参数

  • pfnThreadProc
    指向工作线程的控件函数。 不能为 NULL。 必须对此函数声明如下:

    UINT __cdecl MyControllingFunction( LPVOID pParam );

  • pThreadClass
    CWinThread 派生的对象的 RUNTIME_CLASS

  • pParam
    参数传递到控制函数,如 pfnThreadProc 中的参数至函数声明所示。

  • nPriority
    所需的线程优先级。 有关可用优先级的完整列表和说明,请参见 Windows SDK 中的 SetThreadPriority

  • nStackSize
    以字节为单位指定新线程的堆栈大小。 如果为 0,堆栈大小默认与创建线程的堆栈大小相同。

  • dwCreateFlags
    指定一个额外的控制线程创建的标志。 此标志可以包含两个值之一:

    • CREATE_SUSPENDED   开始挂起计数为 1 的线程。 如果要在线程开始运行之前初始化 CWinThread 对象的任何成员数据,如 m_bAutoDelete 或您的派生类的任何成员,请使用 CREATE_SUSPENDED。 完成初始化后,使用 CWinThread::ResumeThread 使线程开始运行。 直到调用 CWinThread::ResumeThread,线程才会执行。

    • 0  创建后立即启动线程。

  • lpSecurityAttrs
    指向安全特性结构,此结构为线程指定安全特性。 如果为 NULL,则将使用与创建线程相同的安全特性。 有关该结构的更多信息,请参见 Windows SDK。

返回值

如果失败,指针则指向新建的线程对象或 NULL

备注

AfxBeginThread 的第一个窗体创建辅助线程。 第二个窗体创建了一个可用作用户界面线程或辅助线程的线程。

AfxBeginThread 可创建新的 CWinThread 对象,调用其 CreateThread 函数以开始执行线程,然后将指针返回到线程。 在整个过程中进行检查,确保假如创建过程的任何部分出现故障,所有对象都能被正确地解除分配。 若想关闭线程,请从线程内调用 AfxEndThread,或从辅助线程的控制函数返回。

应用程序必须启用多线程;否则此函数将失败。 有关启用多线程的更多信息,请参考 Visual C++ 编译器选项下的 /MD、/MT、/LD(使用运行库)

有关 AfxBeginThread 的更多信息,请参见文章 多线程:创建辅助线程多线程:创建用户界面线程

示例

请参见 CSocket::Attach 的示例。

要求

标头: afxwin.h

请参见

参考

AfxGetThread

概念

MFC 宏和全局函数