(P43)muduo库使用例子(二):文件传输

本文档介绍了使用Muduo库进行文件传输的示例代码,包括服务端和客户端程序。在测试过程中,发现当主线程通过g_loop->quit()退出后,可能导致IO线程尚未结束,存在线程安全问题。为了解决这个问题,作者尝试使用usleep(20000)确保线程安全,但指出更好的解决方案仍有待探讨。
摘要由CSDN通过智能技术生成

文章目录

1.文件传输

  • 文件传输(MuduoManual.pdf P57)

  • eg:服务端程序
    42\jmuduo\examples\filetransfer\download.cc
    42\jmuduo\examples\filetransfer\download2.cc
    examples/filetransfer/download3.cc

  • eg测试:客户端程序
    43\jmuduo\tests\Filetransfer_test.cc
    43\jmuduo\tests\CMakeLists.txt

  • 测试:服务端
    在这里插入图片描述
    客户端
    在这里插入图片描述
    启动了8个TcpClient下载了8个文件
    在这里插入图片描述

  • 测试:启动服务端
    在这里插入图片描述
    启动客户端
    在这里插入图片描述
    客户端修改的代码如下:

g_loop->quit();//会使得主线程的loop.loop();跳出来,使得程序结束
// usleep(20000);注释掉

可能会造成以下结果
quit,之后主线程退出了,但是2个IO线程可能还没有结束,所以这边的线程安全性还有待提高,usleep(20000);之后,这个问题就不会触发了
EventLoop 0x8B62730的创建是在11051线程,但是threadId_=73。
当前只有11050,11052,11051这三个线程,ThreadId_=73说明EventLoop可能被销毁了一部分了出现的问题。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值