core--多线程
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值,用来标识线程
最新文章
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 区域管理功能增强(电子商务方向)
- (转)解释一下SQLSERVER事务日志记录
- 斑点检测(LoG,DoG) [上]
- 地图投影——高斯-克吕格投影、墨卡托投影和UTM投影
- Python字符串基础操作
- Java基础(57):Eclipse中环境配置(视图字体颜色行号调试快捷键等等)
- .NET Framework 4.5、4.5.1 和 4.5.2 中的新增功能
- [Mac]ios应用发布流程
- 数字式PID控制的应用总结
- new和delete为什么要匹配
- google API的.NET库
- c# 图片简单模糊 非高斯模糊
- 权限系统设计实现MVC4 + WebAPI + EasyUI + Knouckout
- memcached实战系列(四)memcached stats命令 memcached优化
- 数据库主键到底是用自增长(INT)好还是UUID好
- ASP.NET MVC 目录介绍
- 我的Java之旅——之后的学习计划
- 一个CSS3滤镜Drop-shadow阴影效果
- 问题解决-某些项目因位于工作空间目录中而被隐藏 &; 如何解决java项目导入出错:与另一项目重叠
- HTML&CSS精选笔记_盒子模型