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值,用来标识线程
core--多线程的更多相关文章
- Core文件作用、设置及用法
http://blog.csdn.net/lanmolei814/article/details/45201693 ====================================== 1.C ...
- ASP.NET Core 新建线程中使用依赖注入的问题
问题来自博问的一个提问 .net core 多线程数据保存的时候DbContext被释放 . TCPService 通过构造函数注入了 ContentService , ContentService ...
- ulimit -c unlimited的使用(转载)
ulimit -c unlimited ulimint -a 用来显示当前的各种用户进程限制Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,设置个Linux用户的最大进 ...
- iOS Core data多线程并发访问的问题
大家都知道Core data本身并不是一个并发安全的架构:不过针对多线程访问带来的问题,Apple给出了很多指导:同时很多第三方的开发者也贡献了很多解决方法.不过最近碰到的一个问题很奇怪,觉得有一定的 ...
- 正确使用Core Data多线程的3种方式
在#Pragma Conference 2015会议上,Marcus Zarra,撰写过关于Core Data和Core Animation的书,叙述了三种在多线程环境下使用Core Data的方法并 ...
- Asp.Net Core 轻松学-多线程之取消令牌
前言 取消令牌(CancellationToken) 是 .Net Core 中的一项重要功能,正确并合理的使用 CancellationToken 可以让业务达到简化代码.提升服务性能的效果 ...
- Multithreading C++ Out of Core Sotring for Massive Data|多线程C++的大规模数据外部排序
先说一下,这个其实是我为实现PantaRay或者是类似Dreamworks的Out of Core点云GI的技术储备,为大规模点云光线跟踪所准备的第一步.在实际的应用中,int类型会被64bit的ui ...
- C# 中一些类关系的判定方法 C#中关于增强类功能的几种方式 Asp.Net Core 轻松学-多线程之取消令牌
1. IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...
- c++比例-libcurl多线程并发时的core【转载】
转自: https://www.cnblogs.com/edgeyang/articles/3722035.html 浅析libcurl多线程安全问题 背景:使用多线程libcurl发送请求,在未设置 ...
- 从执行上下文角度重新理解.NET(Core)的多线程编程[2]:同步上下文
一般情况下,我们可以将某项操作分发给任意线程来执行,但有的操作确实对于执行的线程是有要求的,最为典型的场景就是:GUI针对UI元素的操作必须在UI主线程中执行.将指定的操作分发给指定线程进行执行的需求 ...
随机推荐
- .NET设计模式(4):建造者模式(Builder Pattern)(转)
概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定. ...
- IE8下兼容rgba颜色的半透明背景
在工作中做一个图片半透明遮罩时发现在IE8下不兼容 一查再知道IE8不支持rgba颜色,再搜搜兼容性方法,没想到这么快就解决了. 先说说rgba的含义: r代表red,g代表green,b代表blue ...
- var 和 dynamic在实际项目中的应用
先回顾一下这两个关键词的用法. var是个语法糖,是在用var声明变量的那一刻就确定了其变量的类型. 因为需要在声明的时候就确定其类型,所以要求在用var声明隐式局部变量的时候必须初始化该变量. 编译 ...
- javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例
栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ...
- Nginx搭建flv视频点播服务器
Nginx搭建flv视频点播服务器 前一段时间使用Nginx搭建的多媒体服务器只能在缓冲过的时间区域内拖放, 而不能拖放到未缓冲的地方. 这就带来了一个问题: 如果视频限速的速率很小, 那么客户端观看 ...
- String Reduction
问题出自这里 问题描述: Given a string consisting of a,b and c's, we can perform the following operation: Take ...
- POJ 1222
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6196 Accepted: 40 ...
- POJ 1422
#include <iostream> #define MAXN 350 using namespace std; int mat[MAXN][MAXN]; bool mark[MAXN] ...
- Android ListVIew 详解(一)
在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...
- Javascript scrollTop 20大洋
花了20大洋,买了一个视频,这是读书笔记 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"&g ...