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值,用来标识线程

最新文章

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

热门文章

  1. js实用功能
  2. 企业级账号更新app
  3. CSS自定义select下拉选择框(不用其他标签模拟)
  4. jquery的show/hide性能测试
  5. 利用Jquery实现http长连接(LongPoll) {转}
  6. c3p0 --1
  7. 从CMO到龙泉寺弟子:佛法改变人生
  8. HDU 5596/BestCoder Round #66 (div.2) GTW likes math 签到
  9. NIM博弈的必胜取法
  10. Linux实施一次性任务