精易论坛

标题: 求多线程大佬看看我的多线程 执行久了总是出现混乱 [打印本页]

作者: 哈哈来了    时间: 2025-6-6 09:16
标题: 求多线程大佬看看我的多线程 执行久了总是出现混乱
  
子程序名返回值类型公开备 注
_按钮_开始停止_被单击  
变量名类 型静态数组备 注
bool逻辑型 
len整数型 
如果真 (线程池.取_是否空闲 ())
信息框 (“请等待线程完全停止再启动”, 48 + 65536, , )
返回 ()

线程池.销毁 (0)
编辑框9.内容 = “1”
len = 超级列表框1.取表项数 ()
如果真 (len < 1)
信息框 (“请先导入ck”, 48 + 65536, , )
返回 ()
临界.进入 ()
连续赋值 (0, 已完成数量, 保证显示索引)
临界.退出 ()
bool = 线程.创建 (&工作)
如果真 (bool = )
返回 ()

子程序名返回值类型公开备 注
工作  
变量名类 型静态数组备 注
并发线程数整数型 
bool逻辑型 
len整数型 
i整数型 
空闲线程数整数型 
int整数型 
线程工作数整数型 
a整数型 
临界.进入 ()
并发线程数 = 到整数 (编辑框_并发线程数.内容)
临界.退出 ()
如果真 (并发线程数 < 1)
并发线程数 = 1
bool = 线程池.创建 (并发线程数)
如果真 (bool = )
返回 ()

临界.进入 ()
len = 超级列表框1.取表项数 () - 1  ' 列表索引从0开始
a = 超级列表框1.取表项数 ()
临界.退出 ()
判断 (到整数 (编辑框_账号执行行.内容) = 0)
i = 到整数 (编辑框_账号执行行.内容)
i = 到整数 (到文本 (编辑框_账号执行行.内容))
判断循环首 (i ≤ len)
空闲线程数 = 线程池.取_空闲线程数 ()
如果真 (空闲线程数 > 0)
int = len - i + 1
如果真 (int > 空闲线程数)
int = 空闲线程数
计次循环首 (a, )
如果真 (超级列表框1.取当前状态图片 (i) = 1)  ' 这句话判断检查框是否勾选上,勾选则状态图片=1
线程池.投递任务 (&邀请, i, )

i = i + 1
计次循环尾 ()
bool = 线程池.等待任务动态 ()如果真 (bool = )  ' 返回假 表示线程池被执行销毁 也表示用户手动点了停止
返回 ()

判断循环尾 ()
' 等待剩余任务执行完毕
判断循环首 (线程池.取_是否空闲 ())
如果真 (线程池.取_状态 ()#线程池_正在工作 )
返回 ()
bool = 线程池.等待任务动态 (100)
判断循环尾 ()
' 执行停止
线程池.销毁 (0)
按钮_开始停止.禁止 = 假


i支持库列表   支持库注释   
iext扩展界面支持库一


执行多线程  比如5线程10线程的 时候  CK会出现混乱(比如100行的数据  出现在101行的上面), 求大佬指点一下 感激不尽


作者: 独孤求胜    时间: 2025-6-6 10:57
不要直接在线程里操作UI,不崩溃已经是给你面子了
作者: 独孤求胜    时间: 2025-6-6 10:57
或者你试下我的表格支持库,我对多线程做了处理,个人免费,商业收费
作者: 哈哈来了    时间: 2025-6-6 11:30
独孤求胜 发表于 2025-6-6 10:57
不要直接在线程里操作UI,不崩溃已经是给你面子了

啥意思哥   能改下我的代码吗
作者: 萧楚楠    时间: 2025-6-6 13:47
线程池不需要频繁的创建销毁,读变量不需要加临界,建议找个多线程模板套着写
作者: ayff888    时间: 2025-6-6 13:55
bool = 线程.创建 (&工作)   
.如果真 (bool = 真)
    返回 ()
.如果真结束

这里不就返回了吗!

作者: 哈哈来了    时间: 2025-6-7 09:18
自查找到原因了 , 在线程中读写了全局变量导致的冲突




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