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

Windows多线程控制台程序 学习笔记 Windows多线程控制台程序目的:学习和掌握如何编写Windows多线程控制台程序。通过编写程序,加深对进程和线程关系的理解,掌握多线程程序的执行和编写技巧。设计要求:写一个单进程多线程的Windows控制台程序,该程序在一个进程内建立N个线程来执行指定的任务。N由命令行传递给系统。Win32控制台程序中,主函数的格式如:Void main(int argc,char *argv[]),可以获取命令行参数。通过VC++“工程/设置”的C/C++属性页设置应用程序为“MTD”多线程。利用win32 阅读详情

 

我的理解:

线程可以用来解决因为程序内部处理大量数据而造成的当机,比如图形界面因为程序正在处理大量资源初始化操作而无法相应用户的消息。(1/10秒规则)
一个程序中的线程共享程序的资源,但是线程有自己的堆栈空间。
早期版本线程可以创建消息队列也可以不创建消息队列,一个无消息队列线程无法向一个消息队列线程中的窗口发送消息,或者呼叫任何发送消息的函数(不过,它们可以将消息递送给消息队列线程)。
windows98/NT的线程都有一个消息队列。
这本书建议的编写多线程应用程序的结构:

因此在这里我将为您的程序建议一种架构:您的主执行绪建立您程序所需要的所有窗口,并在其中包含所有的窗口消息处理程序,以便处理这些窗口的所有消息;所有其它执行绪只进行一些背景处理,除了和主执行绪通讯,它们不和使用者进行交流。
可以把这种架构想象成:主线程处理使用者输入(和其它消息),并建立程序中的其它线程,这些附加的线程完成与使用者无关的工作。
创建线程的函数:
1、CreateThread (&security_attributes, dwStackSize, ThreadProc,
       
                       pParam, dwFlags, &idThread) ;
对应的线程函数声明:

DWORD WINAPI ThreadProc (PVOID pParam) ;

2、_beginthread(ThreadProc,uiStackSize,pParam);
对应的线程函数声明:

void __cdecl ThreadProc (void * pParam) ;

一般常用的参数是dwStackSize(线程的堆栈大小,如果赋值为0,则系统会根据线程中需要的堆栈空间动态调整堆栈大小),
ThreadProc(线程调用的函数的地址),
pParam(传给线程调用的函数的参数),

windows程序设计中多线程涉及到3个概念:
1、零界区
零界区就像一个繁华地段的十字路口(资源),如果横向纵向的汽车都想在同一时间经过这个路口结果可想而知,所以横向汽车要通过这个路口要先确定没有纵向汽车通过。
十字路口相当于程序中的共享资源。
多线程程序中,由临界区来做到这点:
CRITICAL_SECTION cs ;
相关函数:
InitializeCriticalSection (&cs) ;//初始化临界区变量
EnterCriticalSection (&cs) ;//进入临界区
LeaveCriticalSection (&cs) ;//离开临界区
DeleteCriticalSection (&cs) ;//删除临界区
临界区只用于同一个程序中的线程间的协调

2、事件对象
事件对象用于线程判断是否发生了某个事件以便处理相应的事情
HANDLE        hEvent ;
相关函数:

CreateEvent (&sa, fManual, fInitial, pszName) ;//创建临界区
SetEvent (hEvent) ;//设置事件对象
ResetEvent (hEvent) ;//重新设置事件对象
WaitForSingleObject (hEvent, dwTimeOut) ;//等待事件的发生

3、线程区域存储空间(tls)
线程区域空间解决的就是线程不共享一个局域静态数据的问题
比如函数f()中需要一个静态变量来持续记录一个数值,而这个函数被多个线程调用,单纯用
static声明的变量会被每个调用这个函数的线程共享,显然不能满足不需求
dwTlsIndex = TlsAlloc () ;//获得索引
TlsSetValue (dwTlsIndex, GlobalAlloc (GPTR, sizeof (DATA)) ;//设置值
TlsGetValue (dwTlsIndex) ;//获得值
GlobalFree (TlsGetValue (dwTlsIndex)) ;//释放线程分配的内存空间
TlsFree (dwTlsIndex) //释放索引
或者用MS对C的扩充功能
__declspec (thread) int iGlobal = 1 ;
__declspec (thread) static int iLocal = 2 ;

南邮Inter多核实验一——Windows环境下多线程程序设计| 实 验 报 告 (  2016 / 2017 学年 第 二 学期)     课程名称 Intel多核程序设计 实验名称 Windows环境下多线程程序设计| 实验时间 2017 年 5 月 9 日 指导单位 计算机学院软件工程系 阅读详情

相关推荐

精通Windows MFC程序设计指南

MFC(Microsoft Foundation Classes)是一种用于Microsoft Windows应用程序开发的C++类库。由微软在1992年推出,旨在简化Windows API的复杂性,使开发者能更容易地进行应用程序的构建。MFC封装了大量的Windows API功能,并提供了许多内置控件和类,以支持GUI程序的开发。面向对象编程(OOP)是一种以对象为中心的编程范式,它使用“对象”来设计软件程序。

weixin_42514750的博客 1084

windows程序设计学习笔记--多任务和多线程

windows中的数据传输:剪切板,动态数据交换,对象链接和嵌入。非抢占式多任务,指 处理完一个消息才处理下一个消息。 帮助解决非抢占式多任务局限方式: 1.设置鼠标图标状态。 2.Windows计时器。 3.PeekMessage调用。 GetMessage必须从消息队列中取到消息才返回。PeekMessage无论是否取到消息都返回,在长时间运行任务中掺入,可对新消息做及时反应

x13262608581的博客 1244

精通Windows程序设计:从入门到高级应用

本文还有配套的精品资源,点击获取 简介:《Windows程序设计》是一本面向初学者的权威教程,专注于使用Microsoft Visual C++开发高效的Windows应用程序。本书详细介绍了Windows编程基础,包括Windows API、Visual C++ IDE、MFC库、消息机制、控件与窗口、资源管理、编译链接过程、调试技巧、异常处理、多线程编程以及文件操作和网...

weixin_35006125的博客 974

Windows 的多线程程序设计

                                   Windows 的多线程程序设计( no mfc )                                                                                                                                           

Amoon100的专栏 2174

掌握Windows程序设计:从入门到高级应用(第五版)

本文还有配套的精品资源,点击获取 简介:《Windows程序设计(第五版)》旨在帮助开发者深入理解并掌握在Windows环境下进行程序设计的技术。该书系统全面地介绍了Windows API的使用方法,消息机制,窗口创建,资源管理,文件系统操作,多线程编程等核心知识,并提供了创建高效稳定程序的实战技巧。本书不仅适合初学者,也有助于经验丰富的程序员提升技能。 1. W...

weixin_35835018的博客 931

抖音直播参数逆向实战:手把手教你用Python获取ttwid和x-bogus(附完整代码)

本文深入解析抖音直播接口的反爬机制,重点剖析核心防护参数ttwid和x-bogus的生成原理与作用。通过Python实战,手把手教你逆向获取ttwid、webid等关键参数,并构建稳定的数据采集方案,为开发者提供企业级数据获取能力。

weixin_29196891的博客 1045

5.【Windows API程序设计】为什么使用多线程?

本文首先澄清多线程设计的目的并非单纯利用多核CPU,而是解决主线程无法处理的问题。通过Windows程序示例展示了线程的基础概念:可执行文件是静态的指令数据集合,进程是动态运行实例,线程是执行单元。当主线程进入死循环时(如示例中的Counter函数),会导致界面卡死,这正是需要创建子线程的场景。子线程共享进程资源但拥有独立执行流,通过时间片轮转实现"并发"。文章强调多线程的核心价值在于任务分解,而非硬件利用,单核处理器同样需要多线程来避免主线程阻塞。

2503_92964515的博客 1011

E28 LoRa模块透传 定点传输 RSSI测试与MicroPython应用

测试说明 测试模块数:3 测试模式:配置模式和传输模式 如果没有检测到串口,首先检查是否安装串口驱动CH341SER,下载链接,提取码:vaw2 工作模式 模式(0-3) M2 M1 M0 模式介绍 备注 0 传输模式 1 0 0 串口打开,无线打开,连续透明传输 空速支持手动配置和自适应波特率自动调节;连续模式双方波特率必须一致 1 RSSI 1 0 1 串口打开,无线打开,RSSI功能打开 模块每100ms输出RSSI强度值 2 测距模式 1 1 0 保留 - 3 配置模式

GniLAY1022的博客 4243

windows下多线程学习笔记1

windows下多线程学习笔记1 1.线程概念 内核对象: 内核对象是由操作系统内核分配,只能由内核访问的数据结构,供系统和应用程序使用来管理各种系统资源 。 句柄: 创建内核对象时,函数的返回值,标记该内核对象。个人理解类似于函数指针。 进程: 进程就是应用程序的运行实例。进程由私有虚拟地址空间、代码、数据和其它操作系统资源(如进程创建的文件、同步对象等)组成 线程: 是程序执行流的最

2010yhh 1569

【研究生学术英语读写教程翻译 中国科学院大学Unit9】

Unit 9 If Humble People Make the Best Leaders,Why Do We Fall for Charismatic Narcissists? 如果谦逊的人是最好的领导者,为什么我们会爱上魅力型自恋者?

fuhanghang的博客 4102

W5500 MACRAW模式实战:在ESP32上抓取并解析原始以太网数据包

本文详细介绍了如何在ESP32开发板上使用W5500芯片的MACRAW模式捕获和解析原始以太网数据包。通过硬件连接指南、代码实现示例和协议解析技巧,帮助开发者深入理解网络通信底层机制,实现网络嗅探和自定义协议开发等高级应用。

weixin_42520573的博客 418

《Windows程序设计》学习笔记(1)

1. 声明一个结构变量,一般用结构名的小写形式作为变量名。2. LP和NP在32为操作系统上是一样的。3. 窗口依照某一窗口类别建立,窗口类别用以标识处理窗口消息的窗口消息处理程序。不同窗口可以依照同一种窗口类别建立。例如,Windows中的所有按钮窗口-包括按键、复选框,以及单选按钮-都是依据同一种窗口类别建立的。窗口类别定义了窗口消息处理程序和依据此类别建立的窗口的其它特征。在建立

yux007的专栏 3095

CameraLink接口详解:从引脚定义到信号传输

本文详细解析了CameraLink接口的物理连接与信号传输机制。从MDR26连接器的引脚定义与镜像关系入手,深入讲解了BASE与MEDIUM模式下的信号映射、LVDS差分传输原理,并强调了屏蔽层处理与端接电阻等关键硬件设计细节。文章结合实战经验,提供了常见图像传输问题的排查思路,是工业视觉领域高速图像传输的实用指南。

weixin_28318011的博客 889

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

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

hada1234的专栏 846

DeepSeek Harness接入QQ实战:把DSH变成赛博群友

大模型应用正从单机问答走向多平台集成,如何将模型能力嵌入即时通讯工具成为工程实践的热点。消息接入、会话管理、插件扩展是构建智能群聊机器人的核心三要素。DeepSeek Harness(DSH)作为一款模型会话工作流管理工具,凭借多会话管理、模型调用编排以及灵活的插件机制,能够在QQ群聊场景中实现“接收消息→模型生成→回复推送”的完整闭环。本文从基础概念切入,详解DSH接入QQ的两种实现路线——外部API转发与原生插件适配,覆盖环境准备、启动调试、接口调用与性能观察,并给出常见问题排查清单。无论是本地AI助理

weixin_27427619的博客 1967

5、模糊风险评估

本文介绍了基于模糊逻辑的风险评估方法,探讨了如何在不确定、不完整信息环境下进行高效的风险分析。文章涵盖了模糊集合与隶属度函数的基本概念、模糊推理系统的流程,并结合犯罪风险、金融风险和医疗诊断等实际案例,展示了模糊风险评估的应用价值和技术细节。此外,还介绍了模糊贝叶斯网络、模糊综合评价等进阶工具与方法,为多领域风险管理提供了理论支持和实践指导。

mango的博客 182

Windows多线程程序设计

英文名称: multithreading applications in Win32, 作者:Jim Beveridge & Robert Wiener 中文名称:Windows多线程程序设计,译者:侯俊杰 听说这本书是学习windows编程必须看的书,于是就看一看。 petzold的widnows 程序设计还没有看完,太厚了。但是,发现这本书也可以看一看,其中对于多线程的许多内容我是知道的

yazhouren的专栏 706

RV1126笔记二十七:MetaRTC6移植

MetaRTC6移植

6038

《Windows程序设计》读书笔二十 多任务和多线程

多任务是指操作系统能够并行运行多个程序的能力。 多线程是指一个应用程序在其自身内部也有支持多任务的能力。 20.1 多任务的模型 20.1.1 DOS下的多任务 早期DOS使用终止并驻留(Terminate-and-stay-resident, TSR)程序 如打印机(spooler) 20.1.2  非抢占式的多任务(消息机制) windows1.0时代,window

sesiria的博客 1379

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

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

windows与linux程序设计的区别

自毕业至今,一直从事着c++相关的工作,有在windows下,也有在linux下,一直想写一篇文章关于windows和linux下程序设计的区别,现在从以下几点进行简短的总结,希望和各位小伙伴共勉。 一、为何windows比较适合客户端程序,linux适合服务端程序 为何windows适合开发客户端程序,从他诞生开始,就是为普通的用户而生,简洁的界面,方便的操作,就是适合运行客户端程序,虽然他也有server版本,但是奔溃和挂起是常有的状态,与linux是无法相提并论的。c++ 客户端程序主要是采用di

lxqiong的专栏 907

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

南邮Inter多核实验二——Windows环境下多线程程序设计||

实 验 报 告 (  2016 / 2017 学年 第 二 学期)     课程名称 Intel多核程序设计 实验名称 Windows环境下多线程程序设计|| 实验时间 2017 年 5 月 16 日 指导单位 计算机学院软件工

hyanan的博客 992

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Windows的多线程程序设计初步

Windows的多线程程序设计初步   一般情况下多线程编程多采用MFC类库实现,那么如果不使用MFC 如何进行多线程程序设计呢?本文将就这个问题进行讨论:   微软在Windows API中提供了建立新的线程的函数CreateThread,它的语法如下: hThread = CreateThread (&security_attributes, dwStackSize, Thre...

weixin_34372728的博客 193

Windows编程经典书籍

本人是刚刚开始学习windows编程的,感觉看雪学院的大牛很NB.想找一些书籍来看学习学习,可是不知道看哪些书好.驱动,对菜鸟们来说真是一个很深奥的话题,所以 ,我找来了这篇文章供大家分享,以后大家发现什么好书就在楼下跟贴吧! 作者:Harry Meng 来源:互联网.也许我的阅读面过于狭小,书架里基本上都是...

qq_40627648的博客 7120

windows程序设计相关思想

<br />就我个人观点,C++/MFC 程序设计必须跨越四大技术障碍:<br />1. 对象导向观念与C++ 语言。<br />2. Windows 程序基本观念(程序进入点、消息流动、窗口函数、callback...)。<br />3. Microsoft Foundation Classes(MFC)本身。<br />4. Visual C++ 整合环境与各种开发工具(难度不高,但需熟练)<br /> <br /><br />SDK - Software Development Kit,原指软件开发工

如果这是你所爱的,要坚持,并踏实。 1635
上一篇: 杂记
old_guy
博客等级 码龄19年 2粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值