Windows进程通信——创建线程

本文详细介绍了Windows环境下创建线程的四种方法:CreateThread、_beginthread、_beginthreadex和AfxBeginThread。讨论了它们的函数原型、使用实例以及线程管理的相关API,如ResumeThread和SuspendThread,并强调了在使用这些函数时应注意的线程同步问题。
摘要由CSDN通过智能技术生成

1. 概述

在Windows环境下创建线程使用的方法主要由如下几种:

CreateThread:CreateThread是Windows的API函数,提供操作系统级别的创建线程的操作,且仅限于工作者线程。不调用MFC和RTL的函数时,可以用CreateThread,其它情况不要轻易使用。在使用的过程中要考虑到进程的同步与互斥的关系(防止死锁)。
beginthread,beginthreadex:MS的C/C++运行期库函数,是对C Runtime库的扩展SDK函数,首先针对C Runtime库做了一些初始化的工作,以保证C Runtime库工作正常。然后,调用CreateThread真正创建线程。
AfxBeginThread:MFC中线程创建的MFC函数,首先创建了相应的CWinThread对象,然后调用CWinThread::CreateThread,在CWinThread::CreateThread中,完成了对线程对象的初始化工作,然后,调用_beginthreadex(AfxBeginThread相比较更为安全)创建线程。它简化了操作或让线程能够响应消息,即可用于界面线程,也可以用于工作者线程,但要注意不要在一个MFC程序中使用_beginthreadex()或CreateThread()

2. 创建线程API和实例

1. CreateThread(),它的函数原型为

HANDLE CreateThread(
  _In_  SEC_ATTRS        SecurityAttributes,
  _In_  ULONG            StackSize,
  _In_  SEC_THREAD_START StartFunction,
  _In_  PVOID            ThreadParameter,
  _In_  ULONG            CreationFlags,
  _Out_ PULONG           ThreadId
);
lpThreadAttributes:
指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,NULL使用默认安全性,不可以被子线程继承,否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE
dwStackSize:
设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小
lpStartAddress:
指向线程函数的指针
lpParameter:
向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL
dwCreationF
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值