HarmonyOS 是否有支持子线程读取rawfile文件内容的C API?

如题:HarmonyOS 是否有支持子线程读取rawfile文件内容的C API?

阅读 425
1 个回答

示例参考:

std::string filename(strBuf, strSize);
// 获取rawfile指针对象
RawFile *rawFile = OH_ResourceManager_OpenRawFile(mNativeResMgr, filename.c_str());
if (rawFile != nullptr) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "Manager", "OH_ResourceManager_OpenRawFile success");
}
// s_rawFile = rawFile;
RawFileDescriptor descriptor;
OH_ResourceManager_GetRawFileDescriptor(rawFile, descriptor);
int fd = descriptor.fd;
std::thread mythread([rawFile, fd]() {
    std::thread::id this_id = std::this_thread::get_id();
    OH_LOG_INFO(LOG_APP, "mythread detached");
    int ret = OH_QoS_SetThreadQoS(QOS_USER_INTERACTIVE);
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "Manager", "WWW QoS %{public}d", ret);

    /*long len = OH_ResourceManager_GetRawFileSize(rawFile);
    std::unique_ptr<uint8_t[]> data= std::make_unique<uint8_t[]>(len);
    int res = OH_ResourceManager_ReadRawFile(rawFile, data.get(), len);
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "Manager", "%{public}d, %{public}d", data.get()[0],
    data.get()[1]);
    */
    uint8_t buf[128];
    int size = read(fd, buf, 128);
    OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "Manager", "%{public}d, %{public}d", buf[0], buf[1]);

    OH_ResourceManager_CloseRawFile(rawFile);
});
mythread.detach();