Window下的线程相关函数学习

目标:使用CreatThread函数创建一个线程,线程循环打印100次“hello”进入挂起状态。

CreatThread函数:创建一个线程

函数的具体形式如下,

#include "windows.h"

HANDLE CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes, 
                     SIZE_T dwStackSize, 
                     LPTHREAD_START_ROUTINE lpStartAddress, 
                     LPVOID lpParameter,
                     DWORD dwCreationFlags, 
                     LPDWORD lpThreadId);

函数参数说明如下:

  •  lpThreadAttributes: 指向SECURITY_ATTRIBUTES结构的指针,决定返回的句柄是否可被子进程继承,如果为NULL则表示返回的句柄不能被子进程继承。
  • dwStackSize:设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小
  • lpStartAddress:指向线程函数的指针,函数名称没有限制,但是必须以下列形式声明:DWORD WINAPI 函数名 (LPVOID lpParam) ,格式不正确将无法调用成功。
  • lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。
  • dwCreationFlags:控制线程创建的标志,可取下:
    • 1)CREATE_SUSPENDED(0x00000004):创建一个挂起的线程(就绪状态),直到线程被唤醒时才调用。
    • 2)0:表示创建后立即激活。
    • 3)STACK_SIZE_PARAM_IS_A_RESERVATION:dwStackSize参数指定初始的保留堆栈的大小,如果STACK_SIZE_PARAM_IS_A_RESERVATION标志未指定,dwStackSize将会设为系统预留的值。
  • lpThreadId:保存新线程的id,是指向线程id的指针,如果为空,线程id不被返回。

线程状态切换

  1. 启动线程:如果调用这个函数,将会启动HANDLE参数所代表的线程。
DWORD ResumeThread(HANDLE hThread); //启动线程

      2.挂起线程:使线程进入挂起状态。

DWORD SuspendThread(HANDLE hThread); //挂起线程

线程结束

ExitThread函数:结束线程调用,终止自己 。问题:dwExitCode是干嘛用的?

void ExitThread(
  __in DWORD dwExitCode	  // 线程结束时的退出码
);

TerminateThread函数:由当前线程结束其他线程。

/*******************************************************
 * @brief 在当前线程结束其他前程
 * @param hTread 结束线程的句柄
 * @parma dwExitCode 线程结束时的退出码(暂时不明白什么作用)
 * @return *
********************************************************/
int TerminateThread (HANDLE hThread, DWORD dwExitCode)

 释放线程空间、释放线程TLS空间、调用ExiteThread结束线程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值