当前位置:首页>鸿蒙APP>成为C/C++三方库鸿蒙化贡献者看这一篇就够了

成为C/C++三方库鸿蒙化贡献者看这一篇就够了

  • 2026-02-18 14:30:35
成为C/C++三方库鸿蒙化贡献者看这一篇就够了

在软件项目开发的全生命周期中,引入成熟的三方库已成为行业共识 —— 无论是快速实现复杂功能、降低底层研发成本,还是规避重复造轮子的资源浪费,优质的三方库都能为开发效率带来质的飞跃。从图形渲染、数据加密到网络通信、算法计算,Windows、macOS、Linux 三大桌面生态凭借数十年的积累,已构建起覆盖全场景、数量庞大且经过市场验证的 C/C++ 三方库资源池,成为全球开发者依赖的技术基石。

然而,当视线转向鸿蒙生态,C/C++ 三方库领域却呈现出截然不同的格局:相较于传统桌面系统 “百花齐放、唾手可得” 的资源优势,鸿蒙化的 C/C++ 三方库目前仍处于起步阶段,可用数量有限、场景覆盖不足、适配成熟度参差不齐,尚未形成完善的生态体系。但恰恰是这种 “尚未被充分挖掘” 的现状,使其成为一片充满无限可能的广阔蓝海 —— 随着鸿蒙系统在智能终端、工业互联、车机等领域的渗透率持续提升,市场对高质量 C/C++ 三方库的需求正呈爆发式增长,从基础工具库到垂直领域专用组件,每一个空白都暗藏着技术突破与商业价值的机遇。

如何抓住这一蓝海机遇,实现从鸿蒙 C/C++ 三方库的单纯使用者到生态核心贡献者的角色转变?如何在适配移植现有优质 C/C++ 三方库、自研鸿蒙原生专用组件的过程中,挖掘技术价值并积累生态话语权?如何通过参与开源共建、输出标准化适配方案、贡献可复用的技术成果,既填补鸿蒙生态的资源空白,又让自身技术能力与成果深度绑定鸿蒙生态发展?这一系列问题,不仅是每一位开发者在蓝海赛道中实现个人技术增值的关键,更关乎整个鸿蒙 C/C++ 生态能否凝聚多方力量,快速完成从 “起步探索” 到 “百花齐放” 的生态构建,真正打造出适配鸿蒙架构特性、覆盖全场景开发需求的优质三方库资源体系。

官方推出的 lycium 框架,堪称 C/C++ 三方库鸿蒙化的 “效率利器”—— 其专为跨平台交叉编译场景设计,通过封装复杂的编译配置、简化依赖管理流程、提供标准化交叉编译配置HPKBUILD和基于原库测试用例验证的测试配置HPKCHECK,大幅降低了三方库鸿蒙化的技术门槛,更将原本需要数周甚至数月的适配周期缩短至数天,让普通开发者也能轻松涉足三方库鸿蒙化工作。而这一工具的出现,正是我们实现从 “生态使用者” 到 “核心贡献者” 角色转变的关键支点:借助 lycium 框架的强大赋能,我们无需深陷底层编译原理的复杂细节,即可快速上手现有优质 C/C++ 三方库的鸿蒙适配移植。

值得一提的是,基于官方提供的基础文档,我们已完成了全流程的实操验证与经验沉淀,系统整理出包含环境搭建、成果验证、代码贡献等关键环节的详细实操指南。在该章节介绍了如何搭建交叉编译环境以及快速完成目标库交叉编译,在该章节介绍了如何使用目标库测试用例来测试目标库鸿蒙化适配的完整性,本章节主要聚焦于完整的贡献流程。

目标库说明

cpp-ipc[1]为例,来演示整个贡献流程。首先根据上面提供的博文内容,完成环境搭建以及交叉编译产物验证确保环境的正确性。

核心功能

cpp-ipc 是一个轻量级的 C++ 跨平台 IPC(进程间通信)库,封装了主流 IPC 机制,提供简洁的 C++ 接口,采用 CMake 作为跨平台编译构建工具,核心功能分类如下:

功能模块
具体说明
管道通信(Pipe)
封装匿名管道、命名管道(FIFO),支持单 / 双向字节流传输,跨 Linux/Windows;
共享内存(Shared Memory)
封装系统共享内存 API,提供内存块的创建、映射、读写、销毁,支持跨进程内存共享;
消息队列(Message Queue)
基于系统消息队列实现,支持按消息类型发送 / 接收数据,解耦进程间通信;
信号量(Semaphore)
用于多进程 / 线程同步,支持计数信号量,解决共享资源竞争问题;
跨平台封装
对 Linux(POSIX)和 Windows 系统的 IPC API 做统一封装,上层接口无感知;
简单 API 设计
所有 IPC 功能封装为 C++ 类(如 PipeSharedMemoryMessageQueue),调用简洁,无需关注底层系统差异;

测试用例

项目 test 目录下包含完整的测试用例,基于轻量级测试框架(无第三方测试库依赖,自研简单断言),覆盖核心功能,主要测试用例如下:

测试模块
测试用例名称 / 核心场景
Pipe 测试
- 匿名管道:父进程写、子进程读,验证数据传输完整性;- 命名管道:两个独立进程间读写,验证跨进程通信;
SharedMemory 测试
- 共享内存创建 / 映射 / 销毁;- 多进程读写共享内存,验证数据一致性;- 异常场景:重复创建、越界访问;
MessageQueue 测试
- 消息发送 / 接收(按类型过滤);- 多进程并发发送 / 接收消息,验证队列完整性;- 消息队列销毁;
Semaphore 测试
- 信号量初始化 / 等待 / 释放;- 多进程同步:通过信号量控制共享资源访问顺序;
跨平台兼容性测试
针对 Linux/Windows 分别验证所有 IPC 功能,确保接口行为一致;

建仓申请

开源鸿蒙通用三方库组织docs仓库[2]提交创建cpp-ipc仓库issue申请。

  • • 打开docs仓库[3],点击Issues页签,点击“新建Issue”按钮。
  • • 点击模板列表中“领取鸿蒙通用三方库任务”行中的“使用该模板”。
  • • 填写必要的目标库信息,以便于平台工作人员及时更新共建清单。
  • • 等待平台工作人员创建cpp-ipc仓库,创建成功后会在当前issue评论区回复仓库地址。

Fork仓库到个人账号

点击评论区创建的目标适配仓库地址,在页面中点击Fork按钮。

在Fork项目信息页面“项目路径”选项中选择“个人账号”,点击“创建Fork项目”按钮将目标仓库Fork到个人账号。

然后将仓库克隆到tpc_c_cplusplus/thirdparty目录下。

完成适配及验证

完成交叉编译配置HPKBUILD

仿照cJSON/HPKBUILD交叉编译配置文件完成cpp-ipc/HPKBUILD交叉编译配置文件。

pkgname=cpp-ipc # 三方库名称(必填)
pkgver=v1.4.1    # 三方库版本(必填)
pkgrel=0
pkgdesc=""
url="https://github.com/mutouyun/cpp-ipc"    # 官方链接(可选)
archs=("armeabi-v7a" "arm64-v8a")
license=("MIT")
depends=()
makedepends=()

source="https://github.com/DaveGamble/$pkgname/archive/refs/tags/$pkgver.tar.gz"

autounpack=true
downloadpackage=true
buildtools="cmake"

builddir=$pkgname-${pkgver:1}
packagename=$builddir.tar.gz

prepare() {
    mkdir -p $builddir/$ARCH-build
}

build() {
    cd $builddir
    PKG_CONFIG_LIBDIR="${pkgconfigpath}" ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" \
        -DOHOS_ARCH=$ARCH -B$ARCH-build -S./ -L > $buildlog 2>&1
    $MAKE VERBOSE=1 -C $ARCH-build >> $buildlog 2>&1
    ret=$?
    cd $OLDPWD
    return $ret
}

package() {
    cd $builddir
    $MAKE VERBOSE=1 -C $ARCH-build install >> $buildlog 2>&1
    cd $OLDPWD
}

check() {
    echo "The test must be on an OpenHarmony device!"
}

# 清理环境
cleanbuild(){
    rm -rf ${PWD}/$builddir #${PWD}/$packagename
}

lycium目录下执行./build.sh cpp-ipc进行交叉编译,出现以下提示表示交叉编译成功。

....
Build cpp-ipc v1.4.1 end!
ALL JOBS DONE!!!

查看目录结构,确保cpp-ipc/cpp-ipc-1.4.1目录下存在交叉编译后的架构目录(如armeabi-v7a)。

通过命令hdc shell getconf LONG_BIT查到ohos设备是32位,进入到armeabi-v7a-build目录,查看目录结构。由目录结构可以看出cpp-ipc最终交叉编译完成的产物是静态库。

静态库本质是ar工具打包的多个.o目标文件的集合,没有独立的执行 / 加载能力,因此需要在HPKBUILD交叉编译配置文件build函数中增加-DLIBIPC_BUILD_SHARED_LIBS=ON将其编译成动态库,并增加-DLIBIPC_BUILD_TESTS=ON开启编译测试用例。

Note

虽然静态库可以通过 “编译链接成可执行程序” 的方式用命令完成测试,但这种方式过于繁琐,不推荐。

build() {
    cd $builddir
    PKG_CONFIG_LIBDIR="${pkgconfigpath}" ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" \
        -DLIBIPC_BUILD_TESTS=ON \
        -DLIBIPC_BUILD_SHARED_LIBS=ON \
        -DOHOS_ARCH=$ARCH -B$ARCH-build -S./ -L > $buildlog 2>&1
    $MAKE VERBOSE=1 -C $ARCH-build >> $buildlog 2>&1
    ret=$?
    cd $OLDPWD
    return $ret
}

清除交叉编译的产物(包括thirdparty/cpp-ipc/cpp-ipc-*lycium/usr/cpp-ipclycium/usr/hpk_build.csvlycium/lycium_build_intl.log),重新执行./build cpp-ipc命令。会出现以下错误信息:

Compileing OpenHarmony armeabi-v7a cpp-ipc v1.4.1 libs...
ERROR during : build -LH -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_RPATH=ON -DCMAKE_SKIP_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=/home/ubuntu/openharmony/ohos-sdk/linux/native/build/cmake/ohos.toolchain.cmake -DCMAKE_INSTALL_PREFIX=/data/tpc_c_cplusplus/lycium/usr/cpp-ipc/armeabi-v7a/ -G "Unix Makefiles" -DOHOS_ARCH=armeabi-v7a
/data/tpc_c_cplusplus/lycium/../thirdparty//cpp-ipc build ERROR. errno: 1
The follow pkg build error!

Caution

原因:gtest 的 internal_utils.cmake 启用了 -WerrorOHOS 工具链传入的 --gcc-toolchain 被 clang 视为未使用,导致编译失败。

Important

  1. 1. prepare() 中加了一条sed:在解压后的 gtest 的 internal_utils.cmake 里,给 Clang cxx_base_flags增加 -Wno-unused-command-line-argument,这样该警告不再触发 -Werror,只改构建目录里的文件,不动你仓库里的源码。
  2. 2. build() 里设置了 CXXFLAGS/CFLAGS:导出 CXXFLAGS 和 CFLAGS,追加 -Wno-unused-command-line-argument
prepare() {
    mkdir -p $builddir/$ARCH-build
    # gtest 使用 -Werror,OHOS 工具链的 --gcc-toolchain 会被 clang 报未使用,需放宽该警告
    sed -i 's/set(cxx_base_flags "-Wall -Wshadow -Werror -Wconversion")/set(cxx_base_flags "-Wall -Wshadow -Werror -Wconversion -Wno-unused-command-line-argument")/' $builddir/3rdparty/gtest/cmake/internal_utils.cmake
}

build() {
    cd $builddir
    # 避免 gtest 因 OHOS 工具链的 --gcc-toolchain 被当作未使用参数而 -Werror 报错
    export CXXFLAGS="${CXXFLAGS:-} -Wno-unused-command-line-argument"
    export CFLAGS="${CFLAGS:-} -Wno-unused-command-line-argument"
    # ...
}

修改完成后,重新执行./build cpp-ipc命令。控制台输出以下内容表示交叉编译成功。

查看cpp-ipc/cpp-ipc-1.4.1/armeabi-v7a-build目录结构,可以看到已经有了动态库文件和测试执行二进制文件。

推送ohos设备验证

cpp-ipc/cpp-ipc-1.4.1/armeabi-v7a-build压缩后使用hdc file send命令推送到ohos开发板上。

ohos设备上解压armeabi-v7a-build.tar.gz,并在armeabi-v7a-build/bin目录下执行./test_ipc启动测试用例。

Caution

执行./test_ipc提示Error loading shared library libipc.so.3: No such file or directory (needed by ./test-ipc)错误。

Important

表示没有找到动态库资源,需要在armeabi-v7a-build/bin目录通过设置export LD_LIBRARY_PATH=$PWD:$PWD/tests:$LD_LIBRARY_PATH指向.so所在目录。

Caution

执行测试二进制文件,出现/data/tpc_c_cplusplus/thirdparty/cpp-ipc/cpp-ipc-1.4.1/test/test_condition.cpp:212: Failure Expected: (elapsed) >= (80), actual: 0 vs 80错误信息。

Important

test_condition.cpp:212 的 TimedWait 用例要求cv.wait(mtx, 100)至少阻塞约 80ms(elapsed >= 80)。在ohos设备上,pthread_cond_timedwait 会很快返回,导致 elapsed 为 0,断言失败。这是环境/调度行为差异,不是业务逻辑错误。

  • • 不修改源代码情况下可以通过timeout 40000 ./test-ipc --gtest_filter=-ConditionTest.TimedWait
  • • 以补丁(.patch)方式,仅改测试,不改库源码。
// cpp-ipc/cpp-ipc_test_condition_timed_wait.patch
--- a/test/test_condition.cpp
+++ b/test/test_condition.cpp
@@ -208,7 +208,8 @@ TEST_F(ConditionTest, TimedWait) {
   auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

   EXPECT_FALSE(result); // Should timeout
-  EXPECT_GE(elapsed, 80); // Allow some tolerance
+  // On some platforms (e.g. OHOS a0) timed wait may return immediately; accept elapsed >= 0
+  EXPECT_GE(elapsed, 0);
 }
# HPKBUILD
prepare() {
    mkdir -p $builddir/$ARCH-build
    # 修复 TimedWait 测试:部分平台(如 OHOS a0) 上 timed wait 可能立即返回,elapsed 为 0
    patch -p1 -d $builddir < $PKGBUILD_ROOT/cpp-ipc_test_condition_timed_wait.patch
    # gtest 使用 -Werror,OHOS 工具链的 --gcc-toolchain 会被 clang 报未使用,需放宽该警告
    sed -i 's/set(cxx_base_flags "-Wall -Wshadow -Werror -Wconversion")/set(cxx_base_flags "-Wall -Wshadow -Werror -Wconversion -Wno-unused-command-line-argument")/' $builddir/3rdparty/gtest/cmake/internal_utils.cmake
}

保存修改,重新执行./build cpp-ipc交叉编译命令,推送资源包到ohos设备上,再执行./test_ipc执行测试用例。

Tip

执行结果中这些 "fail" 是什么意思?

它们不是测试失败,而是 cpp-ipc 库打出的错误日志(ipc::error() 写到 stderr)。测试用例故意走错误分支来检查 API 行为,所以会出现这些输出,测试结果仍然是 PASSED

输出
含义
fail shm_unlink[2]: /xxx
清理共享内存时 shm_unlink() 失败,errno=2ENOENT,对象不存在)。在 OHOS 等环境下较常见,清理时对象可能已被删或路径不同,测试会忽略并继续。
fail: send, there is no receiver on this connection.
用例 SendWithoutReceiver / SendTimeout 故意在“无接收端”时发送,用来验证发送失败并被正确返回。
fail release: invalid id (mem = 0, size = 256)
用例 RemoveById / RemoveByName 等在无效/已释放句柄上调用,用来验证错误处理。

Note

至此,已完成cpp-ipc三方库的交叉编译和编译产物推送ohos设备测试工作。接下来,使用HPKCHECK方式完成测试。

测试用例配置HPKCHECK

如果向ohos设备全量推送tpc_c_cplusplus,也就是lycium/test.sh验证方式,则需要按照模板完成测试用例HPKCHECK配置文件。参考cJSON/HPKCHECK编写cpp-ipc的执行测试用例HPKCHECK配置文件。

source HPKBUILD > /dev/null 2>&1
logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log

openharmonycheck() {
    res=0
    cd $builddir/$ARCH-build
    echo "start test times: `date`" >> ${logfile} 2>&1
    ctest --timeout 40000 >> ${logfile} 2>&1
    res=$?
    if [ $res -ne 0 ]
    then
        mkdir -p ${LYCIUM_FAULT_PATH}/${pkgname}
        cp Testing/Temporary/LastTest.log ${LYCIUM_FAULT_PATH}/${pkgname}/
    fi

    cd $OLDPWD
    echo "end test times: `date`" >> ${logfile} 2>&1

    return $res
}

清除交叉编译的产物(包括thirdparty/cpp-ipc/cpp-ipc-*lycium/usr/cpp-ipclycium/usr/hpk_build.csvlycium/lycium_build_intl.log),重新执行./build cpp-ipc命令。交叉编译完成后,将tpc_c_cplusplus打包并推送到ohos设备与交叉编译同路径下。在tpc_c_cplusplus/lycium目录执行bash ./test.sh cpp-ipc命令运行测试用例。

cd tpc_c_cplusplus/lycium
bash ./test.sh cpp-ipc

cpp-ipc目录下,查看测试用例执行日志。

Caution

发现问题:cpp-ipc 的 CMake 构建了可执行文件test-ipc,但未调用 enable_testing() 和 add_test(),因此 CTest 未注册任何测试。

Important

创建用于向 CTest注册测试的补丁,并更新 HPKCHECK。若 CTest 未发现测试则直接运行可执行文件。

# cpp-ipc/cpp-ipc_ctest_register.patch
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -51,6 +51,7 @@ if (LIBIPC_BUILD_TESTS)
      set(gtest_force_shared_crt ON)
  endif()
  add_subdirectory(3rdparty/gtest)
+    enable_testing()
     add_subdirectory(test)
 endif()

--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -28,4 +28,6 @@ add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES})

 link_directories(${LIBIPC_PROJECT_DIR}/3rdparty/gperftools)
 target_link_libraries(${PROJECT_NAME} gtest gtest_main ipc)
 
#target_link_libraries(${PROJECT_NAME} tcmalloc_minimal)
+
+add_test(NAME test-ipc COMMAND test-ipc)

将补丁加入 HPKBUILD 的 prepare(),并改进 HPKCHECK:在 CTest 未发现测试时直接运行 test-ipc 可执行文件。

# cpp-ipc/HPKBUILD
prepare() {
    mkdir -p $builddir/$ARCH-build
    # 修复 TimedWait 测试:部分平台(如 OHOS a0) 上 timed wait 可能立即返回,elapsed 为 0
    patch -p1 -d $builddir < $PKGBUILD_ROOT/cpp-ipc_test_condition_timed_wait.patch
    # 向 CTest 注册 test-ipc,解决 "No tests were found!!!" 问题
    patch -p1 -d $builddir < $PKGBUILD_ROOT/cpp-ipc_ctest_register.patch
    # gtest 使用 -Werror,OHOS 工具链的 --gcc-toolchain 会被 clang 报未使用,需放宽该警告
    sed -i 's/set(cxx_base_flags "-Wall -Wshadow -Werror -Wconversion")/set(cxx_base_flags "-Wall -Wshadow -Werror -Wconversion -Wno-unused-command-line-argument")/' $builddir/3rdparty/gtest/cmake/internal_utils.cmake
}

更新HPKCHECK:在CTest 未发现测试时改为直接运行 ./bin/test-ipc

# cpp-ipc/HPKCHECK
source HPKBUILD > /dev/null 2>&1
logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log

openharmonycheck() {
    res=0
    cd $builddir/$ARCH-build
    echo "start test times: `date`" >> ${logfile} 2>&1
    ctest --timeout 40000 >> ${logfile} 2>&1
    res=$?
    # 若 CTest 未注册到测试(No tests were found),则直接运行测试可执行文件
    if grep -q "No tests were found" ${logfile} 2>/dev/null && [ -x bin/test-ipc ]; then
        echo "CTest had no tests; running bin/test-ipc directly" >> ${logfile} 2>&1
        ./bin/test-ipc >> ${logfile} 2>&1
        res=$?
    fi
    if [ $res -ne 0 ]
    then
        mkdir -p ${LYCIUM_FAULT_PATH}/${pkgname}
        [ -f Testing/Temporary/LastTest.log ] && cp Testing/Temporary/LastTest.log ${LYCIUM_FAULT_PATH}/${pkgname}/
    fi

    cd $OLDPWD
    echo "end test times: `date`" >> ${logfile} 2>&1

    return $res
}

清除交叉编译的产物(包括thirdparty/cpp-ipc/cpp-ipc-*lycium/usr/cpp-ipclycium/usr/hpk_build.csvlycium/lycium_build_intl.log),重新执行./build cpp-ipc命令。交叉编译完成后,将cpp-ipc打包(根据CPU架构选择)并推送到ohos设备/data/tpc_c_cplusplus/thirdparty/目录,删除当前目录下cpp-ipc文件,并解压推送的新文件。在tpc_c_cplusplus/lycium目录执行bash ./test.sh cpp-ipc命令运行测试用例。

Tip

至此,完成了cpp-ipc鸿蒙化适配工作,已全量通过原库的测试用例。

编写适配说明文档和开源说明文档

READNE.md/README_zh.md

# cpp-ipc 三方库说明

## 功能简介

cpp-ipc(libipc)是一款基于共享内存的高性能跨平台进程间通信(IPC)库,支持 Linux/Windows/FreeBSD,x86/x64/ARM 架构。除 STL 外无其他依赖,采用无锁(lock-free)或轻量级自旋锁设计,底层使用循环数组作为数据结构,支持单写多读(ipc::route)与多写多读(ipc::channel),默认广播模式,支持超时与信号量等待,适合嵌入式与系统级集成。

## 三方库版本

- v1.4.1

## 已适配功能

- 共享内存管理(shm)、互斥锁(mutex)、条件变量(condition)、信号量(semaphore)、自旋锁与读写锁
- 路由(ipc::route)单写多读、通道(ipc::channel)多写多读
- 消息收发、超时等待、广播与多接收端

## 使用约束

- [IDE和SDK版本](../../docs/constraint.md)

## 集成方式

- [应用hap包集成](docs/hap_integrate.md)

README.OPENSOURCE/README.OpenSource

[
    {
        "Name":"cpp-ipc",
        "License":"MIT",
        "License File":"https://github.com/mutouyun/cpp-ipc/blob/master/LICENSE",
        "Version Number":"v1.4.1",
        "Owner":"AtomGit登录账号/邮箱",
        "Upstream URL":"https://github.com/mutouyun/cpp-ipc/archive/refs/tags/v1.4.1.tar.gz",
        "Description":"A high-performance inter-process communication library using shared memory on Linux/Windows/FreeBSD. Lock-free or lightweight spin-lock design, no dependencies except STL."
    }
]

提交PR请求合入

cpp-ipc三方库适配完成后,目录下存在多个文件,是否全都要提交?当然不是,我们只需要提交HPKBUILDHPKCHECKREADME.mdREADME.OPENSOURCESHA512SUM(可选)、*.patch(可选)几个文件即可。

执行命令,将必要文件提交到fork后的个人仓库中。

git add cpp-ipc_ctest_register.patch cpp-ipc_test_condition_timed_wait.patch HPKBUILD HPKCHECK README.md README.OPENSOURCE
git commit -m "已完成鸿蒙化适配"
git push

用浏览器访问fork后的仓库地址,也就是上图中To https://atomgit.com/CodexBai/cpp-ipc.git。查看各文件内容,确保提交无误。

切换“Pull Requests”页签,点击“新建Pull Request”按钮,进入“新建Pull Request”界面。

“新建Pull Request”界面中出现“可直接合入”,点击“下一步”进入PR信息填写页面。

填写目标库适配信息以及验证通过图,以便于平台工作人员审核。点击“创建”按钮,提交PR。

等待平台验证合入PR。合入成功后,会在消息中心收到合入成功消息。若合入不成功,会给出修改意见,修改验证后再次提交PR合入即可。

引用链接

[1] `cpp-ipc`: https://github.com/mutouyun/cpp-ipc
[2] 开源鸿蒙通用三方库组织docs仓库: https://atomgit.com/oh-tpc/docs
[3] docs仓库: https://atomgit.com/oh-tpc/docs

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-04 18:31:15 HTTP/2.0 GET : https://c.mffb.com.cn/a/469038.html
  2. 运行时间 : 0.113570s [ 吞吐率:8.81req/s ] 内存消耗:4,310.38kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1a6c2bec7b9af8f8ade318e49ac88687
  1. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/runtime/temp/cefbf809ba1a84190cb04b0cb7abcf79.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000446s ] mysql:host=127.0.0.1;port=3306;dbname=c_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000709s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000291s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000306s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000597s ]
  6. SELECT * FROM `set` [ RunTime:0.000264s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000717s ]
  8. SELECT * FROM `article` WHERE `id` = 469038 LIMIT 1 [ RunTime:0.001729s ]
  9. UPDATE `article` SET `lasttime` = 1772620275 WHERE `id` = 469038 [ RunTime:0.006884s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.001566s ]
  11. SELECT * FROM `article` WHERE `id` < 469038 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001251s ]
  12. SELECT * FROM `article` WHERE `id` > 469038 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.012381s ]
  13. SELECT * FROM `article` WHERE `id` < 469038 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002193s ]
  14. SELECT * FROM `article` WHERE `id` < 469038 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001907s ]
  15. SELECT * FROM `article` WHERE `id` < 469038 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001733s ]
0.118375s