c++多线程函数----AfxBeginThread

函数原型:

CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOIDpParam, intnPriority= THREAD_PRIORITY_NORMAL, UINTnStackSize= 0, DWORDdwCreateFlags= 0, LPSECURITY_ATTRIBUTESlpSecurityAttrs= NULL );

CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, intnPriority= THREAD_PRIORITY_NORMAL, UINTnStackSize= 0, DWORDdwCreateFlags= 0, LPSECURITY_ATTRIBUTESlpSecurityAttrs= NULL );

        以上两个函数分别为工作者线程和用户界面线程的原型。

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

工作者线程没有消息机制,用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程之外的用户输入,响应用户及系统产生的事件和消息等。

但是对于win32的API编程来说,这两种线程是没有区别的,她们都只需要线程的启动地址即可。

下面分别介绍这两个函数原型及参数:

工作者线程:

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

参数:

pfnThreadProc:指向工作者线程的执行函数的指针,工作者线程函数原型必须声明如下:

UINT MyControllingFunction( LPVOID pParam ); 

pParam:传给线程函数的一个参数,如上工作线程函数原型中的pParam。

nPriority:线程的优先级,如果为0,子线程和创建线程有着同等的优先级。可以通过SetThreadPriority函数设置指定线程的优先级。

nStackSize:指定新线程栈的大小,如果为0,子线程堆栈的大小和父进程一致。

dwCreateFlags:指定创建的工作线程的额外标志。可以是其中之一:

  • CREATE_SUSPEND 线程创建后立即挂起,直到调用ResumeThread函数
  • 0 创建完线程后,线程立即执行。
lpSecurityAttrs:线程的安全属性指针,一般为NULL。当为NULL时,和父线程有着相同的安全属性。
用户界面线程:
CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
pThreadClass:指向CWinThread一个子类的RUNTIME_CLASS对象指针。RUNTIME_CLASS原型

RUNTIME_CLASS( class_name )。class_name 为类的实际名称。

其他和工作线程函数一致。

对此函数说明:

AfxBeginThread创建一个新的CWinThread对象,调用此对象的CteateThread函数开始执行创建的线程,然后返回创建线程的指针。如果想终止这个线程,在此线程中调用AfxEndThread函数,或者子线程执行完毕,返回主线程。

工作线程的实例参见:
 

c++多线程(四),多线程实例六


用户界面线程的实例参见:
c++多线程(三),多线程实例五

你可能感兴趣的:(thread,多线程,C++,工作,null,Class)