C W inThread

CW inThread 对 象 代 表 在 一 个 应 用 程 序 内 运 行 的 线 程 。 运 行 的 主 线 程 通 常 由C W inApp 的 派 生 类 提 供 ; C W inApp 由 C W inThread 派 生 。 另 外 , C W inThread 对 象 允 许 一 给 定 的 应 用 程 序 拥 有 多 个 线 程 。

C W inThread 支 持 两 种 线 程 类 型 : 工 作 者 线 程 和 用 户 界 面 线 程 。 工 作 者 线 程 没有 收 发 消 息 的 功 能 : 例 如 , 在 电 子 表 格 应 用 程 序 中 进 行 后 台 计 算 的 线 程 。 用 户界 面 线 程 具 有 收 发 消 息 的 功 能 , 并 处 理 从 系 统 收 到 的 消 息 。 C W inApp 及 其 派 生类 是 用 户 界 面 线 程 的 例 子 。 其 它 用 户 界 面 线 程 也 可 由 C W inThread 直 接 派 生 。

C W inThread 类 的 对 象 存 在 于 线 程 的 生 存 期 。 如 果 你 希 望 改 变 这 个 特 性 , 将

m_bAutoDelete 设 为 FALSE 。

要 使 你 的 代 码 和 MFC 是 完 全 线 程 安 全 的 , C W inThread 类 是 完 全 必 要 的 。 框 架使 用 的 用 来 维 护 与 线 程 相 关 的 信 息 的 线 程 局 部 数 据 由 CWinThread 对 象 管 理 。由 于 依 赖 C W inThread 来 处 理 线 程 局 部 数 据 ,任 何 使 用 MFC 的 线 程 必 须 由 MFC 创 建 。 例 如 , 由 运 行 时 函 数 _beginthreadex 创 建 的 线 程 不 能 使 用 任 何 MFC API 。

为 了 创 建 一 个 线 程 , 调 用 A fxBeginThread 函 数 。 根 据 你 需 要 工 作 者 线 程 还 是 用户 界 面 线 程 , 有 两 种 调 用 AfxBeginThread 的 格 式 。 如 果 你 需 要 用 户 界 面 线 程 , 则 将 指 向 你 的 C W inThread 派 生 类 的 CR untimeClass 的 指 针 传 递 给AfxBeginThread 。 如 果 你 需 要 创 建 工 作 者 线 程 , 则 将 指 向 控 制 函 数 的 指 针 和 控制 函 数 的 参 数 传 递 给 AfxBeginThread 。 对 于 工 作 者 线 程 和 用 户 界 面 线 程 , 你 可以 指 定 可 选 的 参 数 来 修 改 优 先 级 , 堆 栈 大 小 , 创 建 标 志 和 安 全 属 性 。AfxBeginThread 线 程 将 返 回 指 向 新 的 C W inThread 对 象 的 指 针 。

与 调 用 AfxBeginThread 相 反 , 你 可 以 构 造 一 个 C W inThread 派 生 类 的 对 象 , 然后 调 用 CreateThread 。 如 果 你 需 要 在 连 续 创 建 和 终 止 线 程 的 执 行 之 间 重 复 使 用C W inThread 对 象 , 这 种 两 步 构 造 方 法 非 常 有 用 。

有 关 C W inThread 的 进 一 步 信 息 , 参 见 “ V isual C++ 程 序 员 指 南 ” 中 的 文 章 “ 用C ++ 和 MFC 实 现 多 线 程 ” , “ 多 线 程 : 创 建 用 户 界 面 线 程 ” , “ 多 线 程 : 创建 工 作 者 线 程 ” 和 “ 多 线 程 : 如 何 使 用 同 步 ” 。

请 参 阅 C W inApp,CCmdTarget

C W inThread 类 成 员

Dat a Member s

m_bAutoDelete 指 定 线 程 结 束 时 是 否 要 销 毁 对 象

m_hThread 当 前 线 程 的 句 柄

m_nThreadID 当 前 线 程 的 ID

m_pMainWnd 保 存 指 向 应 用 程 序 的 主 窗 口 的 指 针

m_pActiveWnd 指 向 容 器 应 用 程 序 的 主 窗 口 , 当 一 个 OLE 服 务 器 被 现场 激 活 时

Construction

CwinThread 构 造 一 个 C W inThread 对 象

CreateThread 开 始 一 个 C W inThread 对 象 的 执 行

Operations

GetMainWnd 查 询 指 向 线 程 主 窗 口 的 指 针

GetThreadPriority 获 取 当 前 线 程 的 优 先 级 PostThreadMessage 向 另 外 的 C W inThread 对 象 传 递 一 条 消 息ResumeThread 减 少 一 个 线 程 的 挂 起 计 数

SetThreadPriority 设 置 当 前 线 程 的 优 先 级

SuspendThread 增 加 一 个 线 程 的 挂 起 计 数

Overridables

ExitInstance 重 载 以 进 行 线 程 终 止 时 的 清 理 工 作

InitInstance 重 载 以 实 现 线 程 实 例 的 初 始 化

OnIdle 重 载 以 进 行 线 程 特 定 的 空 闲 操 作

PreTranslateMessage 在 消 息 被 发 送 到 W indows 函 数 Translate M essage

和 D ispatch M essa- ge 之 前 过 滤 消 息

IsIdle M essage 检 测 特 定 的 消 息

ProcessWndProcException 截 获 线 程 消 息 和 命 令 处 理 函 数 出 现 的 所 有 未 处

理 的 异 常

ProcessMessageFilter 在 特 定 的 消 息 到 达 应 用 程 序 之 前 截 获 消 息

Run 线 程 的 具 有 消 息 收 发 功 能 的 控 制 函 数 , 可 重 载以 定 制 缺 省 的 消 息 循 环

成 员 函 数

C W inThread::CreateThread

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

返 回 值

若 成 功 地 创 建 了 线 程 , 返 回 值 为 非 零 ; 否 则 , 返 回 值 为 0 。

参 数

dwCreateFlags

指 定 控 制 线 程 的 创 建 的 附 加 标 志 。 该 标 志 可 以 是 下 列 两 个 值 之 一 :

  • CREATE_SUSPENDED 启 动 线 程 时 将 挂 起 计 数 置 为 一 。 直 到 调

ResumeThread 线 程 才 执 行 。

  • 创 建 后 立 即 启 动 线 程

nStackSize

指 定 以 字 节 数 计 的 新 线 程 的 堆 栈 大 小 。 如 果 为 0 , 堆 栈 的 大 小 缺 省 为 与此 过 程 的 主 线 程 的 堆 栈 大 小 相 同 。

lpSecurityAttrs

指 向 一 个 SECURITY_ATTRIBUTES 结 构 , 此 结 构 指 定 线 程 的 安 全 属 性 。

说 明

此 成 员 函 数 创 建 一 个 在 调 用 过 程 的 地 址 空 间 中 运 行 的 线 程 。 使 用

AfxBeginThread 可 以 一 步 创 建 线 程 对 象 并 运 行 之 。 如 果 你 需 要 在 连 续 创 建 和 线

程 执 行 的 终 止 之 间 重 复 使 用 线 程 对 象 , 应 使 用 CreateThread 。

请 参 阅 AfxBeginThread, CWinThread::CWinThread, ::CreateThread

C W inThread::C W inThread

C W inThread( );

说 明

此 函 数 构 造 一 个 C W inThread 对 象 。 要 执 行 线 程 , 请 调 用 CreateThread 成 员 函数 。 你 通 常 通 过 调 用 AfxBeginThread 来 创 建 线 程 , AfxBeginThread 将 调 用 此 构造 函 数 和 CreateThread 函 数 。

请 参 阅 C W inThread::CreateThread

C W inThread::ExitInstance

virtual int ExitInstance( );

返 回 值

是 线 程 的 退 出 码 ; 值 为 0 表 示 没 有 错 误 , 值 大 于 0 表 示 有 错 误 发 生 。 通 过 调用 ::GetExitCode- Thread .可 以 查 询 到 该 值 。

说 明

框 架 通 过 很 少 被 重 载 的 R un 成 员 函 数 调 用 此 函 数 以 退 出 线 程 的 这 个 实 例 ; 或 者当 调 用 InitInstance 失 败 时 , 调 用 此 函 数 。

除 了 在 R un 成 员 函 数 内 之 外 , 不 得 在 任 何 地 方 调 用 此 成 员 函 数 。 此 成 员 函 数 仅被 用 户 界 面 线 程 使 用 。

当 m_bAutoDelete 为 真 时 , 此 函 数 的 缺 省 实 现 删 除 C W inThread 对 象 。 如 果 你希 望 当 线 程 终 止 时 执 行 额 外 的 清 除 工 作 , 请 重 载 此 函 数 。 当 你 的 程 序 代 码 被 执行 之 后 , 你 的 ExitInstance 实 现 应 调 用 基 类 的 ExitInstance 函 数 。

请 参 阅 C W inApp::ExitInstance

C W inThread::GetMain W nd

virtual CWnd * GetMainWnd( );

返 回 值

此 函 数 返 回 指 向 一 个 窗 口 的 指 针 , 这 个 窗 口 为 两 类 窗 口 中 的 一 种 。 如 果 你 的 线程 是 一 个 OLE 服 务 器 的 一 部 分 并 且 拥 有 一 个 位 于 活 动 容 器 中 的 现 场 激 活 的 对象 , 此 函 数 返 回 C W inThread 对 象 的 C W inApp::m_pActiveWnd 数 据 成 员 。

如 果 没 有 位 于 容 器 中 的 现 场 激 活 的 对 象 或 者 你 的 应 用 程 序 不 是 OLE 服 务 器 , 此 函 数 返 回 线 程 对 象 的 m_pMainWnd 数 据 成 员 。

说 明

如 果 你 的 应 用 程 序 为 一 个 OLE 服 务 器 , 调 用 此 函 数 以 得 到 应 用 程 序 的 活 动 主窗 口 的 指 针 , 而 不 是 直 接 引 用 应 用 程 序 对 象 的 m_pmainWnd 成 员 。 对 于 用 户 界面 线 程 , 调 用 此 函 数 等 价 于 引 用 应 用 程 序 对 象 的 m_pActiveWnd 成 员 。

如 果 你 的 应 用 程 序 不 是 一 个 OLE 服 务 器 , 则 调 用 此 函 数 等 价 于 直 接 引 用 应 用程 序 对 象 的 m_pMainWnd 成 员 。

重 载 此 函 数 以 修 正 缺 省 的 行 为 。

请 参 阅 AfxGetMainWnd

C W inThread::GetThreadPriority

int GetThreadPriority( );

返 回 值

此 函 数 返 回 当 前 线 程 在 其 优 先 级 类 中 的 优 先 级 。 此 返 回 值 应 是 下 列从 高 到 低 列 出 的 优 先 级 值 中 的 一 个 :

  • THREAD_PRIORITY_TIME_CRITICAL

  • THREAD_PRIORITY_HIGHEST

  • THREAD_PRIORITY_ABOVE_NORMAL

  • THREAD_PRIORITY_NORMAL

  • THREAD_PRIORITY_BELOW_NORMAL

  • THREAD_PRIORITY_LOWEST

  • THREAD_PRIORITY_IDLE

关 于 这 些 优 先 级 的 进 一 步 信 息 , 参 阅 “ W in32 SDK 程 序 员 参 考 大 全 ” 第 4 卷 中的 函 数 ::SetThreadPriority 。

说 明

此 函 数 用 于 得 到 线 程 的 当 前 线 程 优 先 级 。

请 参 阅 C W inThread::SetThreadPriority, ::GetThreadPriority

C W inThread::InitInstance

virtual BOOL InitInstance( );

返 回 值

若 初 始 化 成 功 , 返 回 值 为 非 零 ; 不 成 功 则 返 回 0 。

说 明

InitInstance 必 须 被 重 载 以 初 始 化 每 个 用 户 界 面 线 程 的 新 实 例 。 统 称 , 你 重 载

InitInstance 函 数 来 执 行 当 线 程 首 次 被 创 建 时 必 须 完 成 的 任 务 。

此 成 员 函 数 仅 在 用 户 界 面 线 程 中 使 用 。 工 作 者 线 程 的 初 始 化 在 传 递 给

AfxBeginThread 的 控 制 函 数 中 完 成 。

请 参 阅 C W inApp::InitInstance

C W inThread::IsIdleMessage

virtual BOOL IsIdleMessage( MSG* pMsg );

返 回 值

如 果 在 处 理 消 息 之 后 调 用 了 OnIdle , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pMsg

指 向 当 前 被 处 理 的 消 息 。

说 明

如 果 避 免 在 产 生 指 定 的 消 息 以 后 调 用 OnIdle 函 数 , 则 应 重 载 这 个 函 数 。 当 产 生重 复 的 鼠 标 消 息 和 闪 烁 光 标 消 息 之 后 , 这 个 函 数 的 缺 省 实 现 并 不 调 用 OnIdle 。

如 果 应 用 程 序 创 建 了 一 个 短 的 定 时 器 , OnIdle 将 被 频 繁 调 用 , 导 致 性 能 上 的 问题 。 为 了 改 善 这 种 应 用 程 序 的 性 能 , 重 载 应 用 程 序 的 C W inApp 派 生 类 中 的IsIdle M essage 消 息 , 按 照 如 下 方 式 检 测 WM_TIMER 消 息 :

B OOL CMyApp::IsIdleMessage( MSG* pMsg )

{

if (!CWinApp::IsIdleMessage( pMsg ) || pMsg->message == WM_TIMER) return FALSE;

else

}

return TRUE;

按 照 这 种 方 式 处 理 WM_TIMER 消 息 可 以 改 善 那 些 使 用 短 定 时 器 的 应 用 程 序 的

C W inThread::OnIdle

virtual BOOL OnIdle( LONG lCount );

返 回 值

如 果 需 要 更 多 的 空 闲 处 理 时 间 , 则 返 回 非 零 值 ; 如 果 不 需 要 , 则 返 回 0 。

参 数

lCount

该 参 数 是 一 个 计 数 值 , 当 应 用 程 序 的 消 息 队 列 为 空 , OnIdle 函 数 被 调 用时 , 该 计 数 值 就 增 加 1 。 每 当 一 条 新 消 息 被 处 理 时 , 该 计 数 值 就 被 复 位为 0 。 你 可 以 使 用 lCount 参 数 来 确 定 应 用 程 序 不 处 理 消 息 时 空 闲 时 间 的相 对 长 度 。

说 明

如 果 要 执 行 空 闲 时 处 理 , 则 重 载 这 个 成 员 函 数 。 当 应 用 程 序 的 消 息 队 列 为 空 时 , OnIdle 就 在 缺 省 的 消 息 循 环 中 被 调 用 。 你 可 以 用 重 载 函 数 来 调 用 自 己 的 后 台 空闲 处 理 任 务 。

每 被 调 用 一 次 lCount参 数 就 增 加 , 而 每 处 理 一 条 新 消 息 lCount就 被 复 位 为 0 。 你可 以 根 据 这 个 计 数 值 调 用 不 同 的 空 闲 处 理 例 程 。

这 个 成 员 函 数 的 缺 省 实 现 从 内 存 中 释 放 临 时 对 象 和 不 用 的 动 态 链 接 库 。

这 个 成 员 函 数 仅 在 用 户 界 面 线 程 中 使 用 。

由 于 应 用 程 序 在 OnIdle 返 回 之 后 才 能 处 理 消 息 , 因 此 不 应 在 这 个 函 数 中 执 行 较长 的 操 作 。

请 参 阅 C W inApp::OnIdle

C W inThread::PostThreadMessage

BOOL PostThreadMessage( UINT message , WPARAM wParam , LPARAM

lParam );

返 回 值

如 果 成 功 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

message

用 户 自 定 义 消 息 的 ID 。

wParam

第 一 个 消 息 参 数 。

lParam

第 二 个 消 息 参 数 。

说 明

调 用 这 个 函 数 以 向 其 它 C W inThread 对 象 发 送 一 个 用 户 自 定 义 消 息 。 发 送 的 消息 通 过 消 息 映 射 宏 ON_THREAD_MESSAGE 被 映 射 到 适 当 的 消 息 处 理 函 数 。

请 参 阅 ON_THREAD_MESSAGE

C W inThread::PreTranslateMessage

virtual BOOL PreTranslateMessage( MSG * pMsg );

返 回 值

如 果 消 息 在 PreTranslate M essage 中 已 经 被 完 全 处 理 , 不 需 要 再 进 一 步 处 理 , 则返 回 非 零 值 。 如 果 消 息 需 要 按 通 常 方 式 进 一 步 处 理 , 则 返 回 零 。

pMsg

指 向 包 含 了 要 处 理 的 消 息 的 MSG 结 构 。

说 明

如 果 要 在 消 息 被 分 派 到 W indows 函 数 ::Translate M essage 和 ::DispatchMessage 之前 过 滤 W indows 消 息 , 则 应 重 载 这 个 函 数 。

这 个 函 数 仅 在 用 户 界 面 线 程 中 使 用 。

请 参 阅 C W inApp::PreTranslateMessage

C W inThread::ProcessMessageFilter

virtual BOOL ProcessMessageFilter( int code , LPMSG lpMsg );

返 回 值

如 果 消 息 被 处 理 了 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

code lpMsg

指 定 了 钩 子 代 码 。 这 个 成 员 函 数 使 用 这 些 代 码 来 确 定 如 何 处 理 lp Msg 。

指向 W indows 的 MSG 结 构 的 指 针 。

说 明

框 架 的 钩 子 函 数 调 用 这 个 函 数 以 过 滤 并 响 应 特 定 的 W indows 函 数 。 钩 子 函 数 在事 件 被 发 送 到 应 用 程 序 的 正 常 消 息 处 理 机 制 之 前 处 理 这 些 事 件 。

如 果 你 改 变 了 这 种 高 级 特 性 , 确 保 你 调 用 了 基 类 的 相 应 函 数 以 维 持 框 架 的 钩 子处 理 。

请 参 阅 MessageProc, WH_MSGFILTER

C W inThread::Process W ndProcException

virtual LRESULT Process W ndProcException( CException * e , const MSG * pMsg );

如 果 产 生 了 一 个 WM_CREATE 异 常 , 则 返 回 -1 ; 否 则 返 回 0 。

参 数

e pMsg

指 向 没 有 被 处 理 的 异 常 。

指 向 一 个 MSG 结 构 , 其 中 包 含 了 与 导 致 框 架 出 现 异 常 的 W indows 消 息有 关 的 信 息 。

说 明

每 当 处 理 函 数 没 有 捕 获 你 的 线 程 消 息 或 命 令 处 理 函 数 所 抛 出 的 异 常 时 , 框 架 就调 用 这 个 成 员 函 数 。

不 要 直 接 调 用 这 个 成 员 函 数 。

这 个 成 员 函 数 的 缺 省 实 现 仅 处 理 下 列 消 息 产 生 的 异 常 :

命令 动作

WM_CREATE 失 败

WM_PAINT 使 涉 及 的 窗 口 有 效 , 防 止 产 生 另 一 个 WM_PAINT 消 息

重 载 这 个 成 员 函 数 以 提 供 对 异 常 的 全 局 处 理 。 仅 当 你 希 望 执 行 缺 省 的 动 作 时 才调 用 基 类 的 函 数 。

这 个 成 员 函 数 仅 在 具 有 消 息 收 发 功 能 的 线 程 中 使 用 。

请 参 阅 C W inApp::ProcessWndProcException

C W inThread::ResumeThread

DWORD ResumeThread( );

返 回 值

如 果 成 功 , 则 返 回 线 程 的 原 挂 起 计 数 值 ; 否 则 返 回 0xFFFFFFFF 。 如 果 返 回 值为 零 , 则 表 示 当 前 线 程 没 有 被 挂 起 。 如 果 返 回 值 为 1 , 线 程 被 挂 起 , 但 是 即 将重 新 启 动 。 任 何 大 于 1 的 返 回 值 都 表 明 线 程 将 继 续 挂 起 。

说 明

调 用 这 个 函 数 以 使 被 SuspendThread 成 员 函 数 所 挂 起 的 线 程 恢 复 执 行 , 或 者 使用 CREATE_SUSPENDED 标 志 创 建 的 线 程 恢 复 执 行 。 当 前 线 程 的 挂 起 计 数 被减 小 1 。 如 果 挂 起 计 数 被 减 小 到 0 , 线 程 将 恢 复 执 行 ; 否 则 线 程 继 续 被 挂 起 。

请 参 阅 C W inThread::SuspendThread, ::ResumeThread

virtual int Run( );

返 回 值

线 程 返 回 的 一 个 整 数 值 。 这 个 值 可 以 通 过 调 用 ::GetExitCodeThread 来 获 得 。

说 明

这 个 函 数 为 用 户 界 面 线 程 提 供 了 缺 省 的 消 息 循 环 。 Run 接 收 并 分 派 W indows 消息 , 直 到 它 接 收 到 一 个 WM_QUIT 消 息 。 如 果 线 程 的 当 前 消 息 队 列 中 不 包 含 消息 , Run 就 调 用 OnIdle 以 执 行 空 闲 处 理 。 接 收 到 的 消 息 被 送 到PreTranslate M essage 成 员 函 数 以 进 行 特 殊 处 理 , 然 后 被 发 送 到 W indows 函数 ::Translate M essage 以 进 行 标 志 键 盘 转 换 。 最 后 , 调 用 W indows 函数 ::D ispatch M essage。

Run 函 数 很 少 被 重 载 , 但 是 你 可 以 重 载 它 以 提 供 特 殊 的 功 能 。这 个 成 员 函 数 仅 在 用 户 界 面 线 程 中 使 用 。

请 参 阅 C W inApp::Run

BOOL SetThreadPriority( int nPriority );

返 回 值

如 果 这 个 函 数 成 功 地 执 行 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

nPriority

指 定 了 线 程 在 其 优 先 权 类 中 的 新 优 先 权 级 。 这 个 参 数 必 须 是 下 列 值 之 一 , 从 最高 优 先 权 到 最 低 :

  • THREAD_PRIORITY_TIME_CRITICAL

  • THREAD_PRIORITY_HIGHEST

  • THREAD_PRIORITY_ABOVE_NORMAL

  • THREAD_PRIORITY_NORMAL

  • THREAD_PRIORITY_BELOW_NORMAL

  • THREAD_PRIORITY_LOWEST

  • THREAD_PRIORITY_IDLE

有 关 这 些 优 先 权 的 更 多 信 息 参 见 “ W in32 SDK 程 序 员 参 考 ” 第 四 卷 中

的 ::SetThreadPriority 。

说 明

这 个 函 数 设 置 当 前 线 程 在 它 所 属 的 优 先 权 类 中 的 优 先 权 级 。 它 只 能 在

CreateThread 成 功 返 回 之 后 调 用 。

请 参 阅 C W inThread::GetThreadPriority, ::SetThreadPriority

C W inThread::SuspendThread

DWORD SuspendThread( );

返 回 值

如 果 成 功 , 则 返 回 线 程 原 来 的 挂 起 计 数 值 ; 否 则 返 回 0xFFFFFFFF 。

说 明

增 加 当 前 线 程 的 挂 起 计 数 。 如 果 线 程 的 挂 起 计 数 大 于 零 , 则 该 线 程 将 不 被 执 行 。线 程 可 以 通 过 调 用 ResumeThread 成 员 函 数 恢 复 执 行 。

请 参 阅 C W inThread::ResumeThread, ::SuspendThread

数 据 成 员

C W inThread::m_bAutoDelete

参 数

指 定 当 线 程 结 束 的 时 候 , 是 否 要 自 动 删 除 C W inThread 对 象 。 m_bAutoDelete 是

BOOL 类 型 的 公 有 变 量 。

C W inThread::m_hThread

说 明

与 C W inThread 相 关 联 的 线 程 的 句 柄 。 m_hThread 数 据 成 员 是 HANDLE 类 型 的公 有 变 量 。 它 仅 当 线 程 存 在 时 才 有 效 。

说 明

与 CWndThread 相 关 联 的 线 程 的 句 柄 。 m_nThreadID 数 据 成 员 是 DWORD 类 型的 公 有 变 量 。 它 仅 当 线 程 存 在 时 才 有 效 。

C W inThread::m_pActiveWnd

说 明

使 用 这 个 数 据 成 员 保 存 线 程 的 当 前 活 动 窗 口 对 象 的 指 针 。 当 m_pActiveWnd 所代 表 的 窗 口 被 关 闭 时 , 微 软 基 础 类 库 将 自 动 终 止 你 的 线 程 。 如 果 该 线 程 是 应 用程 序 的 主 线 程 , 则 应 用 程 序 将 结 束 。 如 果 这 个 数 据 成 员 为 NULL , 则 应 用 程 序的 C W inApp 对 象 的 活 动 窗 口 将 被 继 承 。 m_pActive W nd 是 CWnd* 类 型 的 公 有变 量 。

通 常 , 你 在 重 载 InitInstance 的 时 候 设 置 这 个 成 员 变 量 。 在 工 作 者 线 程 中 , 这 个数 据 成 员 的 值 是 从 它 的 父 线 程 中 继 承 来 的 。

请 参 阅 C W inThread::InitInstance, CWinThread::m_pMainWnd

说 明

使 用 这 个 数 据 成 员 来 保 存 你 的 线 程 的 主 窗 口 对 象 的 指 针 。 当 m_pMainWnd 所 代表 的 窗 口 被 关 闭 时 , 微 软 基 础 类 库 将 自 动 终 止 线 程 。 如 果 该 线 程 是 应 用 程 序 的主 线 程 , 则 应 用 程 序 将 结 束 。 如 果 这 个 数 据 成 员 为 NULL , 则 应 用 程 序 的C W inApp 对 象 的 主 窗 口 将 被 用 来 确 定 什 么 时 候 终 止 线 程 。 m_pMainWnd 是CWnd* 类 型 的 公 有 变 量 。

通 常 , 你 在 重 载 InitInstance 的 时 候 设 置 这 个 成 员 变 量 。 在 工 作 者 线 程 中 , 这 个数 据 成 员 的 值 是 从 它 的 父 线 程 继 承 的 。

请 参 阅 C W inThread::InitInstance