obj_linkLibrary了一个.a文件,比如这里面定义了一个createWidget函数
过几帧后再用obj_run函数运行一段代码,代码中调用这个createWidget,函数是存在的,但是只要一调用就会报异常:
Assertion "strGetSize(method_dec) <= size" failed, in function: methodArg_getTypeList().
(at E:\projects\aipeiban\lv_binding_pikascript\LVGL.Simulator\pikascript\pikascript-core\PikaObj.c:1062)
而如果直接在这个.a库的代码里调用这个函数又没问题,这是为啥呢?
我肯定是需要在多处多次运行不同的代码的,而这个.a文件里的代码可以理解为就是我为我的工程写的全局库,各种python写的工具函数。这个问题不会无解吧?
离线
估计是线程安全的问题,我不确定你是不是.a的文件里面已经在运行一个python循环了,这样的时候,你再调用obj_run (如果是在另一个线程),这样会导致冲突,我建议你还是用 _thread 模块,因为 _thread 模块里面对这种情况做了加锁。
如果你不用 _thread 模块,那需要去参考 _thread 模块的加锁方式手动加锁。
离线
没有线程安全问题,虽然有多线程,但是所有代码包括lvgl渲染都跑在主线程里,线程用来运行播放器、网络curl请求这些,如果有通知或异步调用,也都是用Message的方式Post到主线程去调用的。脚本只在主线程,所以,线程安全问题肯定是不存在的。
今天发现我在这个.a里面定义了一个变量,在另外一次obj_run的代码里去访问这个变量里的值是可以的,但是调用函数就会报上面那个错误,不管调用这个.a里的哪个函数,都是这个样子
这个问题还有什么可能?
最近编辑记录 coollofty (2025-03-12 18:11:05)
离线
那有可能是栈溢出了,上面这个信息就是属于内核未知原因崩溃了
你只是获取一个变量的话,那使用的内存是很少的,但是 obj_run 要走整个字节码编译流程,占用的 heap 偏多,可能就溢出了
离线