C语言线程制作:线程的操作

在上一篇博客(C语言网络通信制作(使用winscok实现网络通信)-CSDN博客)中我简单介绍了一下C语言线程函数的使用,这一次主要讲解一下线程的操作方式(以下函数均包含在windows.h 或winscok.h)

1,线程ID

线程ID是程序中每个线程的唯一标识符,每个线程在创建时都会被分配一个唯一的线程ID,我们可以通过线程ID对对应的线程进行标识和管理;

如果拒绝获取线程ID可以把

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

中的lpThreadId设成NULL,否则可以lpThreadId中填写一个DWORD指针

DWORD threadId;

CreateThread( NULL, 0, s, (LPVOID)cs,0, &threadId // 用于接收线程ID

);

或者在线程函数里使用GetCurrentThreadId();来获线程ID(在lpThreadId为NULL时也适用),如

DWORD WINAPI f(LPVOID s) {
    DWORD threadId=GetCurrentThreadId();//获取当前线程ID
}

2,线程句柄 

线程句柄用于标识和管理线程,通过线程句柄,程序可以与特定线程进行操作。

线程句柄获取:

线程句柄可以使用 OpenThread() 函数通过线程ID获取,如

HANDLE hThread = OpenThread(THREAD_ALL_ACCESS,//访问权限
FALSE,
Id//线程ID
);

访问权限(dwDesiredAccess):

THREAD_TERMINATE:终止线程的权限。                                THREAD_SUSPEND_RESUME:挂起和恢复线程的权限。
THREAD_GET_CONTEXT:读取线程的上下文的权限。
THREAD_SET_CONTEXT:设置线程的上下文的权限。
THREAD_QUERY_INFORMATION:查询线程信息的权限。
THREAD_SET_INFORMATION:设置线程信息的权限。
THREAD_ALL_ACCESS:所有可用的线程访问权限。

3,函数应用

等待线程结束:

WaitForSingleObject()函数可以阻碍进程,

DWORD WaitForSingleObject(
  HANDLE hHandle,//对象句柄
  DWORD  dwMilliseconds//超时时间
);

超时时间(dwMilliseconds):

dwMilliseconds有三种填写方法

1,"0"

不阻碍进程,一般用于直接返回线程函数是否结束,如果线程已经完成工作,返回WAIT_OBJECT_0;
如果线程还在运行,函数返回 WAIT_TIMEOUT;(返回值下同)

2,"INFINITE"

表示无限等待,直到线程函数结束;

3,常数

表示最大等待时间,在规定时间内等待线程结束,如果达到时间线程没有结束,则不做等待;

 终止线程:

终止线程可以使用 TerminateThread() 函数,

BOOL TerminateThread(
    HANDLE hThread,//要终止的线程的句柄
    DWORD dwExitCode//线程的退出代码
);

线程的退出代码可以填“0”,强制退出线程

挂起和恢复线程:

挂起线程:

挂起线程可以使用 SuspendThread(线程句柄) 函数,用于暂停线程;

恢复线程:

ResumeThread(线程句柄) 函数可以取消线程暂停,恢复线程运行;

设置线程优先级:

线程优先级可以通过 SetThreadPriority() 函数设置

BOOL SetThreadPriority(
    HANDLE hThread,//线程的句柄
    int nPriority//线程优先级
);

 优先级设置:

THREAD_PRIORITY_TIME_CRITICAL   (+15):最高优先级          THREAD_PRIORITY_HIGHEST   (+2):高于正常的优先级
THREAD_PRIORITY_ABOVE_NORMAL   (+1):高于正常优先级
THREAD_PRIORITY_NORMAL   (0):正常优先级,默认值
THREAD_PRIORITY_BELOW_NORMAL   (-1):低于正常优先级
THREAD_PRIORITY_LOWEST   (-2):低优先级
THREAD_PRIORITY_IDLE   (-15):最低的优先级

 

 

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值