《win32多线程程序设计》学习笔记二

Win32多线程程序设计指南与实践 本文还有配套的精品资源,点击获取 简介:Windows环境下的多线程编程技术能够有效提高CPU资源利用率,实现程序的高并发执行。本书详细介绍了多线程编程的核心概念、线程的创建与管理、同步机制、通信方式、线程优先级调整、局部存储、终止和性能优化等方面的知识。书中还探讨了调试多线程程序的技巧,并通过实例和实践指导,帮助开发者掌握在Win32平台上构建高效、稳定并发程序的能力。 ... 阅读详情

一、产生一个线程

1、产生一个线程(并因而成就一个多线程程序),是以CreateThread()函数作为开始。此函数原型如下:




二、使用多线程的结果

1、多线程程序无法预期

 

2、执行顺序无法保证


3、线程对于小的改变有高度的敏感


4、线程并不总是立即启动



三、核心对象

1、CreateThread()传回来的handle被称为一个核心对象。核心对象其实和所谓的GDI对象差不多。


2、核心对象以HANDLE为使用时的参考依据。与GDI的HBRUSH、HPEN、HPALETTE以及其他handle不同的是,只有一种handle可以代表核心对象。


3、win32核心对象的清单:

 1)、进程(processes)

 2)、线程(threads)

 3)、文件(files)

 4)、事件(evnets)

 5)、信号量(semaphores)

 7)、互斥量(mutexs)

 8)、管道(pipes,分为named和anonymous两种)


4、GDI对象和核心对象有一个主要的不同。GDI对象有单一拥有者,不是进程就是线程。核心对象可以有一个以上拥有者,甚至可以跨进程。


5、释放核心对象



6、线程对象与线程的不同

 1)、线程的handle是指向“线程核心对象”,而不是指向线程本身。“线程核心对象”引用到的那个线程也会令线程核心对象开启。

 2)、“引用计数机制”保证有个地方可以写下其返回值。这样的机制也能够保证旧的线程能够读取那个返回值——只要没有调用CloseHandle()。



四、结束代码




五、结束一个线程


1、结束主线程

 1)、程序启动后就执行的那个线程称为主线程。

 2)、主线程有两个特点:

    I、必须负责GUI程序中的主消息循环。

   II、这一线程的结束会使程序中的所有线程都强迫结束,程序也因此二结束,其他线程没有机会做清理工作。



六、错误处理(GetLastError)


七、经验

1、各线程的数据要分离开来,避免使用全局变量。

2、不要在线程之间共享GDI对象。

3、确定你知道你的线程状态,不要径自结束程序而不等待它们的结束。

4、让主线程处理用户界面(UI)

Win32 API下的多线程程序设计实战 本文还有配套的精品资源,点击获取 简介:本文深入探讨了如何使用Win32 API在Windows平台实现多线程编程,涵盖了多线程概念、线程创建、线程同步、线程通信和线程生命周期管理。实例程序通过创建多个线程来执行不同功能,如用户界面更新、计算、数据加载和定时器任务,以提升应用程序的性能和响应性。 1. 多线程概念及其重要性 多线程编程是现代操作系统中提高程序... 阅读详情

相关推荐

Win32多线程程序设计:深入理解与源码改进

在现代操作系统中,多线程编程是一种普遍的现象,它允许程序在多核心处理器上并行执行多个任务,提升应用程序的响应性和效率。Win32 API是Windows操作系统的核心应用程序接口,它提供了一系列函数和数据结构,使得开发者可以方便地在Windows平台上实现多线程程序设计。

weixin_26805451的博客 1074

《Win32多线程程序设计》C++中的多线程

【本章看的比较杂,还是以Q&A的方式展开吧】 Q: C++中调用_beginthreadex()需要注意什么? A: unsigned long _beginthreadex( void *security, unsigned stack_size, unsigned (* start_address)(void*), void *arglist, unsigned initflag, unsi

qingmoshu的专栏 466

PointNet/PointNet++模型调参实战:如何用PyTorch让你的点云分割精度再涨5个点?

本文深入探讨了PointNet/PointNet++模型在点云分割中的调参技巧,通过PyTorch实现精度提升5个点的实战方法。重点分析了点云密度自适应策略、感受野与细节保留的平衡,以及训练加速与稳定性技巧,适用于电力巡检、自动驾驶等场景的激光点云数据处理。

weixin_30836759的博客 477

《win32多线程程序设计》学习笔记一

一、win32基础  1、进程   1)、从win32角度来看,进程含有内存和资源。被进程拥有的资源,理论上可高达2GB。资源包括核心对象,UESR资源,GDI资源。   2)、进程本身并不能够执行,它只是提供一个安置内存和线程的地方。 2、内存  1)、每一个进程都关系到内存。  2)、内存可以大致分为三种类型:    I、Code【Code是程序的可执行部分,一定是只读性

一世豁然的专栏 1002

数据中心机房建设标准及依据

深刻理解、尊重并恪守这些依据,是我们以科学、经济、可靠的方式,为蓬勃发展的数字经济筑牢基石的唯一路径。让我们共同努力,以标准为依据,以匠心为精神,建造更多世界一流的高效能、高可用、高智能的绿色数据中心,共同赋能数字中国的宏伟事业,支撑中华民族在数字时代的伟大复兴征程中稳步前行!今天我将力图以宏大的视角和深入的剖析,系统性地阐述数据中心机房建设所应遵循的多层次、多维度的标准依据,揭示这些依据背后的深层逻辑与时代使命,并探讨其如何共同作用于一座世界级数据中心的诞生。,以支持万兆乃至更高速率的传输。

qq_39980997的博客 1139

华为OD机试2025C卷真题题库目录|机考题库 + 算法考点详解

本文整理华为OD 2025C卷 机试(机考)题库,提供高频考点精析与详细题目内容,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 3988

深入浅出Win32多线程程序设计

深入浅出Win32多线程程序设计之基本概念 2005-12-14 09:48作者:宋宝华出处:天极开发责任编辑:方舟   引言   从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档。   理解多线程及其同步、互斥

amanda_123的专栏 973

知识图谱大模型系列之 12 LLM 知识图谱构建器:从零到 GraphRAG 使用 LLM 知识图谱生成器在 GenAI 应用中提取和使用知识图谱(教程含源码)

为了更深入地了解 LLM 知识图谱构建器,GitHub 存储库提供了大量信息,包括源代码和文档。此外,我们的文档提供了详细的入门指南,而GenAI 生态系统则提供了有关可用更广泛工具和应用程序的进一步见解。

iCloudEnd的博客 2037

Win32多线程程序设计

Win32多线程程序设计”多线程多任务“是程序开发者和用户都需要的一个重要资产。从WindowsNT开始,完全支持32位程序的抢占式多任务。带领我们进入了”多线程多任务“时代。基本概念 进程(processes) 从win32角度来看,进程含有内存和资源,被进程拥有的内存理论上可达2GB,资源包括内核对象(handle,mutex…),user资源(对话框,字符串…),GDI资源(cdc和bru

老骥伏枥,志在千里 3043

基于投影法实现扫描文件的光学字符分割——Matlab实现

投影法是指将原图像沿着某个特定的方向进行投影,得到投影线上的像素点的个数或像素值总和,从而可以得到该方向上物体的轮廓信息。对于字符分割,我们可以将图像进行水平和垂直两个方向的投影,从而得到字符之间的分割线。在OCR技术中,字符分割是非常重要的一步骤,因为字符之间的分割对字符识别的准确性有很大的影响。通过对投影值的判断,可以求出字符之间的分割线,这里我们根据垂直方向上的投影值进行判断,选取一个阈值进行筛选即可。使用sum()函数分别计算出水平和垂直方向上的投影值,得到每一行和每一列的投影值。

TechGlide的博客 582

基于深度学习的目标检测在 Android 端的优化实现:YOLO Mobile × NPU 加速实战教程

随着国产手机芯片日益强大,终端侧的目标检测任务已经具备实用性基础。本文围绕实际工程场景,详细讲解如何在 Android 应用中部署轻量级目标检测模型(如 YOLO Mobile、EfficientDet Lite),并结合国产手机 NPU 能力,实现高性能、低延迟、实时目标检测系统。文章将涵盖从模型选择、结构优化、量化转换到 Android 上推理加速、UI 实时渲染的全链路工程路径,强调每一环节的真实可复现性与部署细节,适合 AI 工程师、移动开发者及企业级应用落地团队参考使用。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1410

win32多线程编程

一.深入浅出Win32多线程程序设计之基本概念 引言   从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档。    理解多线程及其同步、互斥等通信方式是理解现代操作系统的关键一环,当我们精通了Win32多线程程

chinaliping的专栏 2752

第14.8章 高翔博士最新开源框架Lightning-LM源码解读(八):位姿平滑器PoseSmoother深度剖析,从原理到代码实现

本文深度解析了高翔博士开源框架Lightning-LM中的位姿平滑器PoseSmoother模块。该模块通过设置平滑因子,在保证位姿准确性的同时减少突变,使位姿变化更平稳。文章详细讲解了模块功能、数据流程和核心代码实现,包括构造函数、拷贝构造函数以及关键的PushDRPose和PushPose函数。重点分析了位姿平滑算法原理,涉及运动有效性校验、位姿队列维护和平滑因子调节等核心机制。此外还介绍了相关C++语法(如显式构造函数、默认拷贝构造)和优化方向。本解析为SLAM学习者提供了位姿平滑处理的实用实现范例。

行知SLAM 605

学习笔记 -- Win32多线程程序设计(二) WaitForSingleObject and WaitForMultipleObjects

通过前一篇文章,我们已经知道可以通过GetExitCodeThread 来不断获取线程状态确定线程是否已经结束。 这种方法叫做busy loop或者busy wait。但是这种方法并不好,因为它会浪费CPU 可用时间。 只有一两个线程这样去等待还可以,但是如果有成千上百个线程这样去等待的话,CPU的资源将被等待占用,而实际工作的CPU资源将所剩无几。 所以我们需要另外一种等待方式

duoluoxia的专栏 494

Rockchip 自定义vendorstorages数据再u-boot通过cmdline给kernel传递数据

本文介绍通过vendorstorages,允许保存和读取自定义数据。通过在U-Boot中读取这些数据并将其添加到cmdline中,将这些数据传递给Linux内核,实现了一个灵活的方式来配置和定制系统的需求。

我其实什么都不会 1819

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

WIN32多线程程序设计学习笔记(第二章) 收藏

<br />WIN32多线程程序设计学习笔记(第二章) 收藏 <br />  <br />WIN32多线程程序设计学习笔记(第二章)<br /> <br />《WIN32多线程程序设计》这本书也看了好多遍,但总是觉得印象不深;我想是不是应该做做笔记,一来可以加深一下印象。二也在可以在用时方便查阅。J<br /> <br />首先,我觉得线程一点都不难(这样的心理暗示会使我觉得学的轻松一些);<br />why?  <br />与调用函数的过程类似;线程只不过用CreateThread的API将函数<br /

looob的专栏 535

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【Win32 多线程程序设计基础第一章笔记】

在计算机技术的演进中,“线程(Thread)” 始终处于 “被重视却易被误解” 的特殊地位。正如《Win32 多线程程序设计》第一章开篇所言:“计算机工业界每有新技术问世,人们总是先担忧其重要性,直到竞争对手采用才急急赶上;最终用户觉得需要它,却未必了解它是什么。” 线程技术正是如此 —— 它并非新事物,却借着 Windows NT 与 Windows 95 的庞大装机量,首次从操作系统教科书的理论概念,普及为个人电脑程序设计的核心工具。从术语定义来看,线程是比进程(Process)更小的执行单元。

云小逸的博客 1034

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Win32 多线程程序设计基础第三章笔记】

本文档基于《Win32多线程程序设计.pdf》第三章内容整理,全程围绕Win32多线程中“等待机制”展开,针对零基础读者设计——不堆砌复杂术语,而是用“朋友打印文件”“线程信号灯”等通俗比喻,结合文档中原版代码案例,拆解“为什么要高效等待”“如何等待单个线程”“如何定时触发任务”“如何等待多个对象”“GUI程序如何兼顾等待与UI响应”等核心问题,所有知识点均来自指定文档,未添加外部内容,确保内容的准确性与针对性。

云小逸的博客 897

《Win32多线程程序设计》读后感

吐槽一句,纯粹把csdn的博客当成笔记本了。         这个月读的书籍是《Win32多线程程序设计》,忘了在那儿看到推荐这本书的,结果去图书馆一查2002年出版的,在图书馆找到这本书时把我吓着了,封面都掉了,可以想象它的历史有多悠久。。。        只随便翻了几页就决定这个月就是它了,原因很简单,它将与多线程相关的很多概念将的很简单易懂,之前学习多线程相关的知识时很重要的一个问题就是

985

WIN32多线程程序设计学习笔记(第二章)

  WIN32多线程程序设计学习笔记(第二章) 《WIN32多线程程序设计》这本书也看了好多遍,但总是觉得印象不深;我想是不是应该做做笔记,一来可以加深一下印象。二也在可以在用时方便查阅。J 首先,我觉得线程一点都不难(这样的心理暗示会使我觉得学的轻松一些);why?  与调用函数的过程类似;线程只不过用CreateThread的API将函数封装起来,并产生一个与主

chinani的专栏 2721

Win32API多线程程序设计学习笔记

http://blog.sina.com.cn/s/blog_499b249c010003nw.html    Win32API多线程程序设计学习笔记 CreateThread 函数功能:该函数创建一个在调用进程的地址空间中执行的线程。 函数原型:  HANDLE  CreateThread (  LPSECURITY_ATTRIBUTES lpThreadAttributes,

孙建军的博客 950

深入浅出Win32多线程程序设计(一)

<br />  深入浅出Win32多线程程序设计之基本概念 <br />      引言<br /><br />   从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档。<br /><br />   理解多线程及其同步、互斥等通信方式是理解现代操作系统的关键一环,当我们精通了Win32多线程程序设计后,理解和学习其它操作系统的多任务控

ARM专家的专栏 477

《Win32多线程程序设计》学习笔记---(1)

        最近开始看《Win32多线程程序设计》 ,感觉受益匪浅,写出来的目的有两个;一是想看看自己理解的程度,能否总结出作者真正想表达的内容。2是与大家共享。好了,废话就不说那么多了!文章开始讲述了操作系统的演化,作者从早期的MS-DOS1.0版本单任务系统到2.x的可以允许常驻程序(TSR),但是MS-DOS视其为自己的一部分,不是一个应用程序或是一个进程。随后提及到了拥有合作型多任

hada1234的专栏 846

深入浅出Win32多线程程序设计之线程通信

 深入浅出Win32多线程程序设计之线程通信     线程之间通信的两个基本问题是互斥和同步。  线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。   线程互斥是指对于共享的操作系统资源(指的是广义的"资源",而不是Windows的.res文件,譬如全局变量就是一种共享资源),在各线程访

boy8239的专栏 1044

WIN32多线程程序设计学习笔记(第四章 上)

WIN32多线程程序设计学习笔记(第四章 上) 到目前为止,我已经知道如何创建线程,销毁线程及如何判断一个线程是否结束了;但运用线程,管理线程,如何使线程按自己意愿正确运行才是多线程程序设计的重点及难点。 大家知道,线程具有并发性,在同一时间段会存在多个线程,当这些线程同时存取同一数据时,就会有问题。就像在超市储物品一样,来的时候物品箱是空,转身拿物品准备储的时候,发现物品箱

chinani的专栏 2148

(P101)多线程二:Win32多线程程序设计等

文章目录 CreateThread函数的帮助手册 CreateThread遵循WINAPI调用约定_stdcall,调用约定是标准的调用约定,一些回调函数他的调用约定也是_stdcall。 C/C++里面默认的调用约定是_cdecl。与_stdcall区别是,eg如果是可变参数,_cdecl表示使用调用者来清除堆栈。 WaitForSingleObject F1看到的 测试: 29:19 ...

喜欢打篮球的普通人 437
上一篇: 《win32多线程程序设计》学习笔记一
下一篇: 《win32多线程程序设计》学习笔记三
一世豁然
博客等级 码龄15年 1276粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值