计算机网络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
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值