zoukankan      html  css  js  c++  java
  • 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值,用来标识线程

  • 相关阅读:
    Java常用的函数式接口
    Java网络编程的使用
    Java 多线程的使用
    VB.NET_DBUtil
    java 文件操作与IO流的常用方法
    JAVA Excel.xlsx 上传于下载
    java测试类
    Java11 HashMap源码分析(一、文档翻译)
    Canal实现Redis缓存实时更新(二)
    Canal实现Redis缓存实时更新(一)
  • 原文地址:https://www.cnblogs.com/pavkoo/p/3404813.html
Copyright © 2011-2022 走看看