去vc知识库下几本来看看,里面好多东西,
呵呵,我刚才在我的硬盘你帮你查了一下,只是在delphi的《葵花宝典》里面找到一个示例,delphi的书里面有专门讲thread的
这一段是用c写的吧:          吴 芸    徐 超 
            ( 芜 湖 市 电 信 局 241000)  ( 中 国 科 学 技 术 大 学230027) 
                   【 摘 要】 本 文 首 先 讨 论16 位Windows 下 不 具 备 的 线 程 的 概 念, 然 后 着 重 讲 
            述 在32 位Windows 95 环 境 下 多 线 程 的 编 程 技 术, 最 后 给 出 利 用 该 技 术 的 一 个 实 
            例, 即 基 于Windows 95 下TCP/IP 的 可 视 电 话 的 实 现。 
                   【 关 键 词】16 位Windows 环 境,32 位Windows 95 环 境, 进 程, 线 程,TCP/IP,             可 视 电 话 
            一 、问 题 的 提 出
                   作 者 最 近 在 开 发 基 于Internet 网 上 的 可 视 电 话 过 程 中, 碰 到 了 这 样 一 个 
            问 题。 在 基 于Internet 网 上 的 可 视 电 话 系 统 中, 同 时 要 进 行 语 音 采 集、 语 音 编 解 
            码、 图 象 采 集、 图 象 编 解 码、 语 音 和 图 象 码 流 的 传 输, 所 有 的 这 些 事 情, 都 要 并 行 处 
            理。 特 别 是 语 音 信 号, 如 果 进 行 图 象 编 解 码 时 间 过 长, 语 音 信 号 得 不 到 服 务, 通 话             就 有 间 断, 如 果 图 象 或 语 音 处 理 时 间 过 长, 而 不 能 及 时 的 传 输 码 流 数 据, 通 信 同 样 
            也 会 中 断。 这 样 就 要 求 我 们 实 现 一 种 并 行 编 程, 在 只 有 一 个CPU 的 机 器 上, 也 就 是 
            要 将 该CPU 时 间 按 照 一 定 的 优 先 准 则 分 配 给 各 个 事 件, 定 期 处 理 某 一 事 件 而 不 会 
            在 某 一 事 件 处 理 过 长, 在32 位Windows 95 或Windows NT 下, 我 们 可 以 用 多 线 程 的 
            编 程 技 术 来 实 现 这 种 并 行 编 程。 实 际 上, 这 种 并 行 编 程 在 很 多 场 合 下 都 是 必 须 的。             例 如, 在File Manager 拷 贝 文 件 时, 它 显 示 一 个 对 话 框, 列 出 源 文 件 和 目 标 文 件 的 
            名 称, 并 在 对 话 框 中 包 含 了 一 个Cancel 按 钮。 如 果 在 文 件 拷 贝 过 程 中, 点 中Cancel 
            按 钮, 就 会 终 止 拷 贝。 在16 位Windows 中, 实 现 这 类 功 能 需 要 在File Copy 循 环 内 部 
            周 期 性 地 调 用PeekMessage 函 数。 如 果 正 在 读 一 个 很 大 的 数 据 块, 则 只 有 当 这 个 块 
            读 完 以 后 才 能 响 应 这 个 按 钮 动 作, 如 果 从 软 盘 读 文 件, 则 要 花 费 好 几 秒 的 时 间, 由             于 机 器 反 应 太 迟 钝, 你 会 频 繁 地 点 中 这 个 按 钮, 以 为 系 统 不 知 道 你 想 终 止 这 个 操 
            作。 如 果 把File Copy 指 令 放 入 另 外 一 个 线 程, 你 就 不 需 要 在 代 码 中 放 一 大 

解决方案 »

  1.   

    堆PeekMessage 函 数, 处 理 用 户 界 面 的 线 程 将 与 它 分 开 操 作, 这 样, 点 中Cancel 按 
                钮 后 会 立 即 得 到 响 应。 同 样 的 道 理, 在 应 用 程 序 中 创 建 一 个 单 独 线 程 来 处 理 所 有 
                打 印 任 务 也 是 很 有 用 的, 这 样, 用 户 可 以 在 打 印 处 理 时 继 续 使 用 应 用 程 序。             二 、线 程 的 概 念
                       为 了 了 解 线 程 的 概 念, 我 们 必 须 先 讨 论 一 下 进 程 的 概 念。 
                       一 个 进 程 通 常 定 义 为 程 序 的 一 个 实 例。 在Win32 中, 进 程 占 据4GB 的 地 址 空 
                间。 与 它 们 在MS-DOS 和16 位Windows 操 作 系 统 中 不 同,Win32 进 程 是 没 有 活 力 的。 这 
                就 是 说, 一 个Win32 进 程 并 不 执 行 什 么 指 令, 它 只 是 占 据 着4GB 的 地 址 空 间, 此 空 间 
                中 有 应 用 程 序 EXE 文 件 的 代 码 和 数 据。EXE 需 要 的 任 意DLL 也 将 它 们 的 代 码 和 数 据             装 入 到 进 程 的 地 址 空 间。 除 了 地 址 空 间, 进 程 还 占 有 某 些 资 源, 比 如 文 件、 动 态 内 
                存 分 配 和 线 程。 当 进 程 终 止 时, 在 它 生 命 期 中 创 建 的 各 种 资 源 将 被 清 除。 
                       但 是 进 程 是 没 有 活 力 的, 它 只 是 一 个 静 态 的 概 念。 为 了 让 进 程 完 成 一 些 工 
                作, 进 程 必 须 至 少 占 有 一 个 线 程, 所 以 线 程 是 描 述 进 程 内 的 执 行, 正 是 线 程 负 责 执 
                行 包 含 在 进 程 的 地 址 空 间 中 的 代 码。 实 际 上, 单 个 进 程 可 以 包 含 几 个 线 程, 它 们 可             以 同 时 执 行 进 程 的 地 址 空 间 中 的 代 码。 为 了 做 到 这 一 点, 每 个 线 程 有 自 己 的 一 
                组CPU 寄 存 器 和 堆 栈。 每 个 进 程 至 少 有 一 个 线 程 在 执 行 其 地 址 空 间 中 的 代 码, 如 果 
                没 有 线 程 执 行 进 程 地 址 空 间 中 的 代 码, 进 程 也 就 没 有 继 续 存 在 的 理 由, 系 统 将 自 
                动 清 除 进 程 及 其 地 址 空 间。 为 了 运 行 所 有 这 些 线 程, 操 作 系 统 为 每 个 独 立 线 程 安 
                排 一 些CPU 时 间, 操 作 系 统 以 轮 转 方 式 向 线 程 提 供 时 间 片, 这 就 给 人 一 种 假 象, 好             象 这 些 线 程 都 在 同 时 运 行。 创 建 一 个Win32 进 程 时, 它 的 第 一 个 线 程 称 为 主 线 程, 
                它 由 系 统 自 动 生 成, 然 后 可 由 这 个 主 线 程 生 成 额 外 的 线 程, 这 些 线 程, 又 可 生 成 更 
                多 的 线 程。 
                三、线 程 的 编 程 技 术
                       1、编 写 线 程 函 数 
                       所 有 线 程 必 须 从 一 个 指 定 的 函 数 开 始 执 行, 该 函 数 称 为 线 程 函 数, 它 必 须 
                具 有 下 列 原 型: DWORD WINAPI YourThreadFunc(LPVOIDlpvThreadParm);                    该 函 数 输 入 一 个LPVOID 型 的 参 数, 可 以 是 一 个DWORD 型 的 整 数, 也 可 以 是 
                一 个 指 向 一 个 缓 冲 区 的 指 针, 返 回 一 个DWORD 型 的 值。 象WinMain 函 数 一 样, 这 个 函 
                数 并 不 由 操 作 系 统 调 用, 操 作 系 统 调 用 包 含 在KERNEL32.DLL 中 的 非C 运 行 时 的 一 
                个 内 部 函 数, 如StartOfThread, 然 后 由StartOfThread 函 数 建 立 起 一 个 异 常 处 理 
                框 架 后, 调 用 我 们 的 函 数。                    2、创 建 一 个 线 程 
                       一 个 进 程 的 主 线 程 是 由 操 作 系 统 自 动 生 成, 如 果 你 要 让 一 个 主 线 程 创 建 
                额 外 的 线 程, 你 可 以 调 用 来CreateThread 完 成。 
                       HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpsa, DWORD 
                cbstack, LPTHREAD_START_ROUTINE lpStartAddr, LPVOID lpvThreadParm, 
                DWORD fdwCreate, LPDWORD lpIDThread); 
                       其 中lpsa 参 数 为 一 个 指 向SECURITY_ATTRIBUTES 结 构 的 指 针。 如 果 想 让 对             象 为 缺 省 安 全 属 性 的 话, 可 以 传 一 个NULL, 如 果 想 让 任 一 个 子 进 程 都 可 继 承 一 个 
                该 线 程 对 象 句 柄, 必 须 指 定 一 个SECURITY_ATTRIBUTES 结 构, 其 中bInheritHandle 
                成 员 初 始 化 为TRUE。 参 数cbstack 表 示 线 程 为 自 己 所 用 堆 栈 分 配 的 地 址 空 间 大 
                小,0 表 示 采 用 系 统 缺 省 值。 参 数lpStartAddr 用 来 表 示 新 线 程 开 始 执 行 时 代 码 所 
                在 函 数 的 地 址, 即 为 线 程 函 数。lpvThreadParm 为 传 入 线 程 函 数 的 参 数,fdwCreate             参 数 指 定 控 制 线 程 创 建 的 附 加 标 志, 可 以 取 两 种 值。 如 果 该 参 数 为0, 线 程 就 会 立 
                即 开 始 执 行, 如 果 该 参 数 为CREATE_SUSPENDED, 则 系 统 产 生 线 程 后, 初 始 化CPU, 登 
                记CONTEXT 结 构 的 成 员, 准 备 好 执 行 该 线 程 函 数 中 的 第 一 条 指 令, 但 并 不 马 上 执 
                行, 而 是 挂 起 该 线 程。 最 后 一 个 参 数lpIDThread 是 一 个DWORD 类 型 地 址, 返 回 赋 给 
                该 新 线 程 的ID 值。