MFC多线程

 

1  .MFC 线

MFC 线 持, 户编 便。 是, 线 下,MFC 口线 计。

MFC 线 程: 线 程(Worker Thread 线 (UserInterface Thread)    线 制, 后台 务。   MFC 线 制, 入, 的事 息。 Win32 API 说, 线 别, 线 便启 线 务。 线 CWinApp CwinApp 熟悉, CWinThread 类, 线 供, 的事 息。 CwinThread 线 类。CWinThread 线 的局 据。 线 CWinThread 使 MFC 线 MFC 如, run-time _beginthreadex 线 使 MFC API

 

2  .   线 线 终止

线 程, AfxBeginThread。该 本, 线 线 程。 线 是用 线 程, 级, 小, 等。 AfxBeginThread CWinThread 针。

CWinThread* AfxBeginThread(
      AFX_THREADPROC  pfnThreadProc,//
控制函数
      LPVOID  pParam,// 传送给控制函数的参数
      int nPriority = THREAD_PRIORITY_NORMAL,// 线程的优先级
      UINT  nStackSize = 0,// 新线程使用的栈的以字节为单位的大小
      DWORD  dwCreateFlags = 0,// CREATE_SUSPENDED0
      LPSECURITY_ATTRIBUTES  lpSecurityAttrs = NULL//安全特性
     );

线

单。 步: 控制 线 CWinThread 类。 下:

1. 线 程。 当进 数, 线 动; 退 时, 线 止。 下:

             UINT MyControllingFunction( LPVOID pParam );

32 值。 的值 线 数。 值, 或是 针, 略。 构, 数据 线 程, 线 数。 使 据, 结果 候, 线 数。 时, UINT 值, 束的 因。 常, 0 功, 误。

2. 线 AfxBeginThread 并初 CWinThread 象, 线 址。 线 态。

3. 定义 使 用。

UINT MyThreadProc( LPVOID pParam )

{

     CMyObject* pObject = (CMyObject*)pParam;

     if (pObject == NULL ||

         !pObject- >IsKindOf(RUNTIME_CLASS(CMyObject)))

     return -1;     //非法参数

    ……//具体实现内容

     return 0;     //线程成功结束

}

 

//在程序中调用线程的函数

……

pNewObject = new CMyObject;

AfxBeginThread(MyThreadProc, pNewObject);

          ……

创建用户界面线程

CWinThread* AfxBeginThread(
      CRuntimeClass*  pThreadClass,//
CWinThread继承的对象的RUNTIME_CLASS
      int nPriority = THREAD_PRIORITY_NORMAL,
      UINT  nStackSize = 0,
      DWORD  dwCreateFlags = 0,
      LPSECURITY_ATTRIBUTES  lpSecurityAttrs = NULL
     );

创建用户界面线程有两种方法。

首先, CWinTread 子类 DECLARE_DYNCREATE IMPLEMENT_DYNCREATE );

后,  AfxBeginThread CWinThread 线 行。

首先, CWinThread 一个

然后, ::CreateThread 线

CWinThread::CreateThread

      BOOL CreateThread(DWORD dwCreateFlags = 0,
                  UINT nStackSize = 0,
                  LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
                 );

CWinThread 线程 止, 制, m_bAutoDelete FALSE。这 线 CWinThread 在, CWinThread 象。

线 后, 线 止。 CwinThread 线 作。 线 线 话, 需要 线 AfxEndThread(nExitCode) 线 码。 线 行,并 线 源。

线 线 程, 线 信方 法。 线 线 话, 使 Win32 数(CWinThread 函数):BOOL TerminateThread(HANDLE hThread,DWORD dwExitcode) 该函 使 慎, 出, 线 程, 线 资源, 定。

线 线 程,则 线 止。

 

3 线

Windows95 WindowsNT 中, 任务 的, 32 级, 0 31 线 行。

1) 0-15 线 可以 化。 线 行, 线 时, 线 行。优 线 行。

2) 16-30 先级 转, 线 CPU,如 制, 线 行。

    线 类, 是其 置。 线 示:

线 = + 线 优先

级:

          IDLE_PROCESS_CLASS

          NORMAL_PROCESS_CLASS

          HIGH_PROCESS_CLASS

          REAL_TIME_PROCESS_CLASS

线程的相对优先级:

          THREAD_PRIORITY_IDLE

 (最低优先级,仅在系统空闲时执行)

          THREAD_PRIORITY_LOWEST                      

          THREAD_PRIORITY_BELOW_NORMAL      

   THREAD_PRIORITY_NORMAL  (缺省)

          THREAD_PRIORITY_ABOVE_NORMAL                

          THREAD_PRIORITY_HIGHEST                     

          THREAD_PRIORITY_CRITICAL

 (非常高的优先级)

 

4 线

线 线程 访 问。 线 访 的结 果。 如, 线 线 构。 结果, 态: 据, 据,

MFC 访 这个 题, 括:

CSyncObject, CSemaphore, CMutex, CcriticalSection CEvent

访 CMultiLock CSingleLock

访 性。其

CsyncObject 类, 使 用。

CSemaphore 当一 线 访 如, Document View)的 况;

CEvent 访 如, 数据 到) 况;

  CMutex 同步 CcriticalSection 线 访 在于 使 源( 如, DLL 中) 一个 访 畴, 使 高。

访 访 问。CMultiLock CSingleLock 访 象。

 

5 使

  步类 中, 线 类。

的使 法。

序。 3 不同 测, 户。 后, 网络 档。

使 3 3 户, 使 CSemaphore 3 访 问。 时, 使 CCriticalSection 新。 后, CEvent 号, 信号 线 程。 线 档。

线 类, 况在 员。 中, CSemaphore 窗类 中, CCriticalSection 类, CEvent 存储 中。

后, 使 中, 类与 访 来。 即, 访 CSingleLock CMultiLock Lock 数。 访 后, UnLock 数, 源。

  线 易。 在保 线 时, 烦, OOP 想。 使 线 类方 线 杂, 中。 线 失一 率, CPU 线 源。