一直头疼于易语言的json解析多线程,奈何本鸟太菜,终于看到某大佬写了个借助鱼刺多线程模块实现json解析的例子,放在博客分享学习下。

1、所需模块:

  • 精易模块
  • 鱼刺多线程模块

2、截图:

易语言json解析鱼刺多线程实例

3、代码:

.版本 2
.支持库 spec

.程序集 窗口程序集_启动窗口
.程序集变量 总线程句柄, 整数型
.程序集变量 许可证, 整数型
.程序集变量 线程总数, 整数型
.程序集变量 线程池, 鱼刺类_线程池Ex
.程序集变量 线程, 鱼刺类_线程操作
.程序集变量 数量, 整数型

.子程序 _按钮1_被单击
.局部变量 json, 类_json

编辑框1.内容 = “”
许可证 = _创建进入许可证 ()
json.解析 (#ICD10)
数量 = json.成员数 (“Rows”)
线程.创建 (&工作线程, , 总线程句柄, , , , , , )

.子程序 工作线程
.局部变量 并发线程, 整数型
.局部变量 bool, 逻辑型
.局部变量 任务总数, 整数型
.局部变量 执行数, 整数型
.局部变量 空闲线程, 整数型
.局部变量 循环数, 整数型
.局部变量 索引, 整数型
.局部变量 时间, 整数型

时间 = 取启动时间 ()
并发线程 = 到数值 (编辑框_线程数.内容)
.如果真 (并发线程 < 1)
    并发线程 = 1
.如果真结束
bool = 线程池.创建 (并发线程)  ' 如果没有创建成功就返回
.如果真 (bool = 假)
    返回 ()
.如果真结束
任务总数 = 到数值 (编辑框_任务数.内容)
.判断循环首 (执行数 < 任务总数)  ' 当执行数>= 任务总数时 就跳出循环
    空闲线程 = 线程池.取_空闲线程数 ()
    .如果真 (空闲线程 > 0)  ' 如果有空闲的线程,就投递任务进去执行
        循环数 = 任务总数  ' 如果 任务总数小于 空闲线程
        .如果真 (循环数 > 空闲线程)
            循环数 = 空闲线程  ' 如果循环数 大于空闲线程 就等于 ,不超出空闲线程
        .如果真结束
        .计次循环首 (循环数, )
            执行数 = 执行数 + 1  ' 投递一次 数值递增一次
            线程池.投递任务 (&功能_取JSON值, 执行数, )
        .计次循环尾 ()
        延时 (到数值 (编辑框_延时.内容))  ' 直观的展示一下 ,最好不用 , 精易模块 程序_延时()不错 比系统自带好
    .如果真结束
    bool = 线程池.等待任务动态 ()
    .如果真 (bool = 假)
        返回 ()
    .如果真结束

.判断循环尾 ()
线程池.销毁 (1, , )
标签1.标题 = 到文本 (取启动时间 () - 时间) + “毫秒”

.子程序 功能_取JSON值
.参数 索引, 整数型
.局部变量 json, 类_json
.局部变量 icd10Code, 文本型
.局部变量 icd10Name, 文本型

json.解析 (#ICD10)
icd10Code = json.取通用属性 (“Rows[” + 到文本 (索引) + “].icd10Code”)
icd10Name = json.取通用属性 (“Rows[” + 到文本 (索引) + “].icd10Name”)
_进入许可区 (许可证)
编辑框1.内容 = 编辑框1.内容 + icd10Name + icd10Code + #换行符
_退出许可区 (许可证)
调试输出 (icd10Code)
_进入许可区 (许可证)
线程总数 = 线程总数 - 1
_退出许可区 (许可证)
易语言
文章目录