AfxBeginThread创建线程的用法



       今天没什么事,研究一下多线程函数,好记性不如烂笔头,用菜鸟的语言先记录下来,这个是工作线程,对我们工作来说,这个就足够了。 

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

       1、看一下该函数的第一个参数AFX_THREADPROC pfnThreadProc为线程调用函数名称。AFX说明是个全局函数,为了方便以后定义的时候,直接定义为static UINT jisuan(LPVOID lpParam)静态函数就行。

      2、第二个参数LPVOID pParam,是一个void类型的参数。在创建一个线程的时候,你可以传进去一个量,然后在UINT CThreadDlg::jisuan(LPVOID lpParam)函数中取出来。最常用的用法就是,当你想用到窗口类的时候,可以将窗口类的句柄传过去。方法如下:先获取窗口句柄CWnd *pParam=AfxGetMainWnd(),然后AfxBeginThread作为第二个参数传过去。在线程函数中强制类型转换CThreadDlg *pThreadDlg=(CThreadDlg *)lpParam就能操作窗口类的变量、控件等等了。

     3、nPriority工作线程优先级,同级为THREAD_PRIORITY_NORMAL;

    4、nStackSize:  以字节为单位指定新线程的堆栈大小。如果为0,则与创建它的线程的堆栈大小相同。

    5、dwCreateFlags:指定一个额外的标志控制线程的产生。它可以包括下面两个值中的个:CREATE_SUSPENDED:以挂起模式开始线程,并且指定挂起次数.当调用ResumeThread时,这个线程才会被执行。0 :创建之后,马上执行线程。

    6、lpSecurityAttrs 默认为null就行。

   7、创建线程后,如果成功则会返回CWinThread* pThread的变量。这个变量可用于对线程的控制,如暂停pThread->SuspendThread()和继续pThread->ResumeThread();



你可能感兴趣的:(MFC)