当前位置: 首页 > news >正文

计算机网络13——IM聊天系统——网络功能实现——UDP

目录

1、类的成员变量

2、魔鬼数字

3、创建接收数据的线程

4、线程函数

5、防止旧接收到的数据被新数据覆盖掉

6、拷贝用的函数:memcpy_s

7、回收线程资源

8、计数器-1

(1)结束线程工作

(2)关闭句柄

测试代码


1、类的成员变量

同一个类中的多个函数中都要使用的变量应设置为类的成员变量

2、魔鬼数字

解决方法:定义成宏

目的:1、好理解        2、好修改,如果需要修改,只需要修改一处

3、创建接收数据的线程

(1)CreateThread 和 ExistThread

如果线程中使用了C++运行时库的函数(比如strcpy),这些函数会申请空间,但是不释放

ExistThread退出线程时也不释放这些空间,会造成内存泄漏

(2)_beginthreadex和_endthreadex

_endthreadex会在线程退出的时候,先回收空间,再调用EXistThread

m_handle=(HANDLE)_beginthreadex(nullptr,0,&recvThread,this,0,nullptr);

第一个参数_Security:表示安全级别,nullptr为使用默认安全级别

第二个参数_StackSize:表示堆栈大小,0表示使用默认堆栈大小1M

                                       堆栈大小决定了一个服务端能创建多少线程

第三个参数_StartAddress:表示线程函数起始地址,&recvThread

第四个参数_ArgList:表示线程函数参数列表,this

第五个参数_InitFlag:表示初始化标志位,0表示线程创建即运行,还有一个挂起状态

第六个参数_ThrdAddr:表示操作系统给线程分配的id,输出参数,nullptr表示不需要

HANDLE为重定义的类型,原类型为void*,初始化时可初始化为nullptr

4、线程函数

线程的作用取决于线程函数的写法

unsigned __stdcall Udp::recvThread(void* IpVoid)
{Udp* pThis = (Ud

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Oracle高级压缩和透明数据加密组合实验
  • CSS学习6
  • CSS中 特殊类型的选择器 伪元素如何使用
  • python文件自动化(4)
  • XMind v24 激活,简单一键激活
  • Spring、SpringMVC、SpringBoot都是什么,有什么区别
  • TinyWebSever源码逐行注释()_简单代码的整合
  • 将 x 减到 0 的最小操作数
  • 视觉语言模型(VLMs)知多少?
  • 【2024】MySQL库表基本操作
  • 从 CRX 文件安装 Chrome 扩展程序
  • 安卓13带有系统签名的应用不能正常使用webview 调用webview失败 系统应用app apk
  • 突破代码:克服编程学习中的挫折感
  • 创建一个Oracle版本的JDK的Docker镜像
  • C++笔记15•数据结构:二叉树之二叉搜索树•
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【391天】每日项目总结系列128(2018.03.03)
  • C++入门教程(10):for 语句
  • java8 Stream Pipelines 浅析
  • Java-详解HashMap
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Python3爬取英雄联盟英雄皮肤大图
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 如何优雅地使用 Sublime Text
  • 深入浅出webpack学习(1)--核心概念
  • 小程序开发中的那些坑
  • 应用生命周期终极 DevOps 工具包
  • ​queue --- 一个同步的队列类​
  • # linux 中使用 visudo 命令,怎么保存退出?
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (~_~)
  • (C11) 泛型表达式
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (转)socket Aio demo
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .“空心村”成因分析及解决对策122344
  • .JPG图片,各种压缩率下的文件尺寸
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET Micro Framework 4.2 beta 源码探析
  • .net MVC中使用angularJs刷新页面数据列表
  • .net6Api后台+uniapp导出Excel
  • .NET6实现破解Modbus poll点表配置文件
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • .net连接MySQL的方法
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .net下简单快捷的数值高低位切换
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @vue/cli 3.x+引入jQuery
  • [ C++ ] STL_vector -- 迭代器失效问题