精易论坛

标题: 问个并发访问数组超出的问题 [打印本页]

作者: xiaojylw1    时间: 2025-5-23 00:57
标题: 问个并发访问数组超出的问题
.版本 2
.支持库 EThread
.支持库 spec


        参数文本 = ID + “|” + 数据 + “|” + 地区
        启动线程 (&cha询, 取变量数据地址 (参数文本), 句柄)


cha询子程序里面
.版本 2


文本 = 指针到文本 (文本地址)
参数数组 = 分割文本 (文本, “|”, )
ID = 参数数组 [1]
数据 = 参数数组 [2]
地区 = 参数数组 [3]


但是这样子有时候一天有时候几个小时 就会出现数组成员超过下标 这个应该怎么去解决呢 就是不让他传参错误 之前找到一个去判断他的数组是否足够 但是这样子影响执行 就相当于数组不够就加空 或者




作者: Ruang    时间: 2025-5-23 01:05
  
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
文本文本型 
文本地址整数型 
参数数组文本型0
文本 = 指针到文本 (文本地址)
参数数组 = 分割文本 (文本, “|”, )
如果 (取数组成员数 (参数数组) = 3)
ID = 参数数组 [1]
数据 = 参数数组 [2]
地区 = 参数数组 [3]
调试输出 (“参数数组不足3”)


i支持库列表   支持库注释   
spec特殊功能支持库


作者: 永美发    时间: 2025-5-23 01:09
.版本 2


文本 = 指针到文本 (文本地址)
参数数组 = 分割文本 (文本, “|”, )


局_数组成员数=取数组成员数 (参数数组)


.判断开始 (局_数组成员数=0)
    ID =“”
    数据 = “”
    地区 = “”
.默认

    .判断开始 (局_数组成员数 = 1)
        ID =参数数组 [1]
        数据 = “”
        地区 = “”
    .默认

        .判断开始 (局_数组成员数 = 2)
            ID =参数数组 [1]
            数据 = 参数数组 [2]
            地区 = “”
        .默认

            .判断开始 (局_数组成员数 = 3)
                ID = 参数数组 [1]
                数据 = 参数数组 [2]
                地区 = 参数数组 [3]
            .默认

            .判断结束

这样
作者: xiaojylw1    时间: 2025-5-23 01:15
Ruang 发表于 2025-5-23 01:05
[e=3].版本 2
.支持库 spec

我知道这样子能不出现数组成员超过下标 但是实际上我传入的参数是正常的 但是不知道为什么到解析那边就不正常了 也许是并发导致覆盖或者缺失 有没有什么办法不用这个补齐数组 而是避免出现覆盖或者缺失的方法
作者: xiaojylw1    时间: 2025-5-23 01:15
永美发 发表于 2025-5-23 01:09
.版本 2

我知道这样子能不出现数组成员超过下标 但是实际上我传入的参数是正常的 但是不知道为什么到解析那边就不正常了 也许是并发导致覆盖或者缺失 有没有什么办法不用这个补齐数组 而是避免出现覆盖或者缺失的方法
作者: 永美发    时间: 2025-5-23 01:20
光看这个 天知道为什么缺了 只能你自己测试才知道哪里有问题为什么一定要线程呢。。。
作者: aipca    时间: 2025-5-23 08:14
迸发可以试试用线程许可的方式来试试
  
许可证 = 线程_创建许可证 ()
启动线程 (&cha询, 取变量数据地址 (参数文本), 句柄)
子程序名返回值类型公开备 注
cha询  
线程_进入许可区 (许可证)
文本 = 指针到文本 (文本地址)
参数数组 = 分割文本 (文本, “|”, )
ID = 参数数组 [1]
数据 = 参数数组 [2]
地区 = 参数数组 [3]
线程_退出许可区 (许可证)
线程_删除许可证 (许可证)


作者: 阿素里戈沃里嘚    时间: 2025-5-23 09:20
你的【参数文本】变量是局部的吗?是局部的话就把静态的勾勾打上!
作者: po1718    时间: 2025-5-23 14:41
   '参数文本' 如果是局部变量. 那么就要在 添加一句   延时(30)
如:
启动线程 (&cha询, 取变量数据地址 (参数文本), 句柄)
延时(30)
因为 启动线程数不等待返回的,  局部变量程序跑完就会自动释放变量内存,相当于清除变量里面的数据.这样启动的线程就无法读取传进来的数据了.延迟一下为了让线程能收到数据

补充内容 (2025-5-23 14:46):
线程传参,不建议直接传局部变量,最好是把数据写到一个内存,让线程读取最安全.
作者: Ruang    时间: 2025-5-23 17:21
xiaojylw1 发表于 2025-5-23 01:15
我知道这样子能不出现数组成员超过下标 但是实际上我传入的参数是正常的 但是不知道为什么到解析那边就不 ...

多线程用许可证,避免数据丢失或出错,解析不出来会不会是编码问题?
作者: 右手胜过左手    时间: 2025-5-23 19:25
大致原因就是堆区和栈区变量管理不同导致。你要这样传参就要用申请内存,再 取变量数据地址;解析后要释放。长时间不停循环申请内存和释放内存一样有概率出错。




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4