测试: 内网速度测试


需求

树莓派挂上了2T的硬盘做数据盘以及备份盘,最初用的wifi2G连的(为了线少),发现速度不够用啊,然后换成5G速度还是不够用。最终决定还是把网线连上来提升速度。路由器是千兆的口,无线还是不够用。
局域网内速度测试这里用到Iperf这款工具软件。

速度对比

-wifi 2.4Gwifi 5G有线千兆
速度1Mbps100Mbps900Mbps

Iperf工具介绍

Iperf 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。

Iperf工具使用

Iperf下载地址

1.下载与安装

Widows可以去官网下载,下载后解压,无需安装。
linux(ubuntu20.04)可以直接安装 apt install iperf3

使用

因为linux做服务端的话需要处理防火墙,所以直接让win做服务端,linux做客户端来测试。

SERVER 服务端启动命令

iperf3.exe -s

CLIENT 客户端启动命令

iperf3 -c 192.168.31.240(服务端地址)

测试结果

嗯,千兆舒服!
屏幕截图 2022-11-21 175337.jpg


CMake: 配置并发编译(添加编译参数)


需求

项目中源文件过多,导致编译过慢,正常在vs中就可以配置并发编译,但是每次cmake之后就要重新在vs中的属性上重新修改一下,太麻烦。不光需要配置并发编译,还要处理release下的调试配置。每次配置其实都要手动操作,很让人头痛。上网找了一些资料发现add_compile_options这个cmake配置项就可以直接添加编译配置项.
微信图片编辑_20221029092751.jpg

代码

add_compile_options("/MP")  # 并发编译配置项

# 配置选项(在cmake中勾选)
option(ReleaseAndDebug "Release And Debug" on)
if(ReleaseAndDebug)
# 在release中开调试
    add_compile_options("/Zi")  # 调试信息格式
    add_compile_options("/Od")  # 禁用优化
endif()

配置及结果


CMake: 文件及文件夹的复制


需求

代码编写过程中写了GTest相关的东西,涉及到了调用三方库的dll及其他相关的东西。这就需要将三方内包含的目录及文件在编译前复制到exe的执行文件目录内。这就需要cmake的add_custom_target命令了。

官方文档:https://cmake.org/cmake/help/v3.22/command/add_custom_target.html?highlight=add_custom

代码

# 归拢需要复制的文件
FILE(GLOB RUNTIME_DEBUG_DLL_FILES CONFIGURE_DEPENDS
    ${ZsOverdrive_CONFIG_PATH}/../../bin/Releasex64/*
)

# 归拢需要复制的文件夹
FILE(GLOB RUNTIME_DEBUG_DLL_DIRS CONFIGURE_DEPENDS
    ${ZsOverdrive_CONFIG_PATH}/../../bin/Releasex64
    ${ZsOverdrive_CONFIG_PATH}/../../driver
)

# 复制相关文件
ADD_CUSTOM_TARGET(CopyRuntimeFiles ALL
    VERBATIM
    COMMAND_EXPAND_LISTS
    # 创建目录
    COMMAND ${CMAKE_COMMAND} -E
        make_directory "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/"
    # 复制文件
    COMMAND ${CMAKE_COMMAND} -E
        copy_if_different
            "$<$<CONFIG:Release>:${RUNTIME_RELEASE_DLL_FILES}>"
            "$<$<CONFIG:Debug>:${RUNTIME_DEBUG_DLL_FILES}>"
            "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/"
    # 复制文件夹
    COMMAND ${CMAKE_COMMAND} -E
        copy_directory
            "$<$<CONFIG:Release>:${RUNTIME_DEBUG_DLL_DIRS}>"
            "$<$<CONFIG:Debug>:${RUNTIME_DEBUG_DLL_DIRS}>"
            "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/"
)

C++: 指针转换


1. 摘要

2. 转换函数

|普通指针|智能指针|说明|
|static_cast|static_pointer_cast|进行上行转换|
|dynamic_cast|dynamic_pointer_cast|进行下行转换|
|const_pointer_cast|const_pointer_cast|一般用于修改底指针|
|reinterpret_cast|reinterpret_pointer_cast|强制类型转换符(慎用)|

3. 示例