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

devtools/2024/12/22 14:39:13/

目录

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

http://www.ppmy.cn/devtools/107723.html

相关文章

Leetcode JAVA刷刷站(106)从中序与后序遍历序列构造二叉树

一、题目概述 二、思路方向 在Java中,根据给定的中序遍历(inorder)和后序遍历(postorder)数组来构造二叉树是一个相对常见的问题。基本思路是,后序遍历的最后一个元素总是当前子树的根节点。然后&#xff…

[UVM]6.component driver monitor sequencer agent scoreboard env test

1.知识点回顾 (1)component需要有parent,因为参加构成组件,所以需要(继承); (2)object与component之间间隔report_object。 2.组件家族 (1)构建…

广义回归神经网络(GRNN)

一、简介 广义回归神经网络 (General Regression Neural Network , GRNN) 的概念是由德 国科学家多纳德提出的,是径向基网络的其中一种 。因为其是以数理统计为基 础的,因此 GRNN 可以依据样本数据逼近其中包含的非线性映射关系。即使样本 数…

如何使用Linux命令行创建文件

可以使用命令行中的 touch 或 echo 命令来创建一个名为 main.rs 的文件。以下是两种方法: 方法 1:使用 touch 命令 touch 命令用于创建一个空文件。运行以下命令来创建 main.rs 文件: touch main.rs这将在当前目录下创建一个名为 main.rs …

Day11_0.1基础学习MATLAB学习小技巧总结(11)——程序流程控制2

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 素材来源“数学建模清风” 特此说明:本博客的内容只在于总结在…

戴尔 Latitude5290 平板上手笔记

想搞个Windows 平板平时带着方便,比安卓平板更泛用,戴尔这个二手九成新机器价格还不错,七百块咸鱼上捡回来个二手。虽然用7 代CPU 的5285 价格更便宜,但是我觉得还是上8 代i5 吧,因为还记得当年说8 代更新牙膏挤了挺多…

[Unity3D]胡闹厨房复刻笔记

完整笔记内容点击https://kokoollife.github.io/查看。 部分内容 02 简陋实现 001 玩家控制器 [1]简单移动 a:逻辑与动画分离 b:新建脚本Player.cs using UnityEngine;public class Player : MonoBehaviour {//私有就保证不被其他脚本修改该变量,序列化保证我…

服务器安装pytorch-阿里云-centos7

原文阅读:【巨人肩膀社区专栏分享】服务器安装pytorch-阿里云-centos7 1、创建一个虚拟环境 conda create -n pytorch python3.10 安装成功:   但是使用上面的命令会失败(疑问?&#xf…