core--多线程

时间:2022-04-10 07:01:44

WINDOWS是一个多线程操作系统,所谓多线程,就是在同一时间里,有多个线程同时在运行。我们上一遍说到CPU的执行序列是严格按照顺序来执行,怎么能够同一时间来执行很多程序呢?在早期答案是:windows在内部创建一个数据接口来维护线程,每当线程执行一段时间后(一个时间片),windows讲中断该线程的执行,而切换到另外一个线程,因为这个切换过程非常快,通常在1s内可以让所有的线程都执行很多次,所以人根本就感觉不到线程的切换,所以就称windows为多线程操作系统;在现在的答案是:如今的CPU大多是多核心,也就相当于有多个CPU,那每一个CPU对应一个线程,多个CPU当然就是多线程了!

前面说了系统创建主线程,程序员通过什么样的方式来创建自己的线程呢?

CreateThread

PSECURITY_ATTRIBUTES psa

DWORD cbStackSize  线程的堆栈大小 一般传入0——系统自动分配

PTHREAD_START_ROUTINE pfnStartAddr  函数地址

函数原型定义为:DWORD WINAPI ThreadFunc( LPVOID );

PVOID pvParam 传给线程的一个32位参数

DWORD dwCreateFlags

CREATE_SUSPENDED  线程创建后不执行

0 创建完毕就可以执行

PDWORD pdwThreadId

“线程有2个状态:可调度—OS会给线程分配CPU

不可调度—OS不会给线程分配CPU”

当线程被调度之后,就会调用ThreadFunc( pvparam)函数来执行线程里面的代码,这个线程就被我们称作是次线程。

正常情况下ThreadFunc函数执行完毕返回,自动退出线程,当然我们也可以通过调用一下几种函数来强制退出线程,但是强制退出会到C++对象析构函数不被调用,C++运行库没有正确释放等等等等问题,所以不推荐使用,除非自己明白后果

1.ExitThread

2.TerminateThread

3.ExitProcess

我们称呼线程叫“主线程”,“次线程”线程有没有一个真正的名字呢?windows为我们提供了几个函数

getCurrentThread

函数就会放回一个线程的句柄,可以用这个句柄来标示某个线程

getCurrentThreadId

返回一个Int值,用来标识线程