精易论坛

标题: 多线程停不下来的问题 [打印本页]

作者: henengyan    时间: 2025-5-10 03:21
标题: 多线程停不下来的问题
  
子程序名返回值类型公开备 注
主线程  
变量名类 型静态数组备 注
局_任务线程整数型 
i整数型 
局_当前任务数整数型 
局_线程信息线程_子任务信息 
局_任务线程 = 到整数 (编辑框_任务数.内容)
集_并发 = 到整数 (编辑框_并发数.内容)
如果真 (取反 (线程池_鱼刺.创建 (局_任务线程 × 集_并发, 1500, , , , , )))
信息框 (“线程池创建失败!”, 0, , )
返回 ()

日志 (“=====================[线程池创建成功]==========================”, )
重定义数组 (集_线程组, 假, 0)
判断循环首 ()
如果真 (超级列表框_工作表单.取表项数 () > 局_当前任务数)
计次循环首 (超级列表框_工作表单.取表项数 (), i)
如果真 (超级列表框_工作表单.取标题 (i - 1, 10)“等待执行”)
加入成员 (集_线程组, 局_线程信息)
超级列表框_工作表单.置标题 (i - 1, 10, “Doing...”)
启动线程 (&线程_子线程, i, )
局_当前任务数 = 局_当前任务数 + 1

系统_处理事件 ()
计次循环尾 ()
程序_延时 (100, )
判断循环尾 ()


i支持库列表   支持库注释   
iext扩展界面支持库一
EThread多线程支持库
  
子程序名返回值类型公开备 注
线程_子线程  
参数名类 型参考可空数组备 注
i 
变量名类 型静态数组备 注
空闲线程整数型 
单次投递整数型 
执行线程数整数型 
并发双精度小数型 
' 置入代码 (#SP_Begin_7)
调试输出 (“线程子任务开始:”, i)
集_线程组 [i].子任务id = i  ' 主线程
集_线程组 [i].任务线程运行中数量 = 0  ' 子线程执行数量
集_线程组 [i].任务线程总运行次数 = 0  ' 运行次数
集_线程组 [i].结束判断 = 0  ' 结束判断
判断循环首 ()
' 检查是否收到结束信号
如果真 (集_线程组 [i].结束判断 = 1)
日志 (“线程 ”到文本 (i)“ 收到停止信号,退出”, )
跳出循环 ()

如果真 (集_并发 - 集_线程组 [i].任务线程运行中数量 > 0)
单次投递 = 集_并发 - 集_线程组 [i].任务线程运行中数量
计次循环首 (单次投递, )
判断 (组合框_捡漏类型.现行选中项 = 1)  ' 快捷下单
线程池_鱼刺.投递任务 (&任务_快捷下单, i, )



原子_递增 (集_线程组 [i].任务线程运行中数量)
原子_递增 (集_线程组 [i].任务线程总运行次数)
系统_处理事件 ()
程序_延时 (到整数 (编辑框_任务延迟.内容), )
计次循环尾 ()
如果真 (线程池_鱼刺.等待任务动态 (, ))  ' 当用户点击停止线程  返回假  超时也是返回假
跳出循环 ()
如果真 (线程池_鱼刺.取_状态 () = 3)
跳出循环 ()
如果真 (集_线程组 [i].结束判断 = 1)
跳出循环 ()
系统_处理事件 ()
' 原有的线程投递逻辑...
判断循环尾 ()
调试输出 (“子线程结束”, i)
' 置入代码 (#SP_End)



i支持库列表   支持库注释   
spec特殊功能支持库
  
子程序名返回值类型公开备 注
_按钮_结束任务_被单击  
变量名类 型静态数组备 注
i整数型 
index整数型 
ii整数型 
掉线文本型 
线程_销毁 (集_主线程句柄)
线程池_鱼刺.销毁 (0, )
日志 (“=====================[线程池销毁成功!!!]==========================”, )
index = 超级列表框_工作表单.现行选中项
如果真 (index ≠ -1)
临界.进入 ()
超级列表框_工作表单.置标题 (index, 10, “已掉线”)
集_线程组 [index + 1].结束判断 = 1
临界.退出 ()


i支持库列表   支持库注释   
iext扩展界面支持库一
  现在是掉线的会自动停掉线的线程,没有掉线的继续运行,但是呢点停止任务呢,死活停不下来,一直嗷嗷运行

作者: coini    时间: 2025-5-10 03:21

.支持库 spec


集_线程池.创建 (100, 100, , 真, 1024 × 128)

集_任务工作中 = 真
' =====在需要终止线程的时候 将该变量 = 假


.判断循环首 (集_任务工作中)
    .如果真 (集_注册数量 ≥ 100)  ' =====此处可以写注册数量限制  例如 注册成功100个跳出循环
        跳出循环 ()
    .如果真结束


    .如果真 (集_线程池.取_空闲线程数 () > 0)
        集_线程池.投递任务 (&子程序_工作任务, , )
    .如果真结束

    程序_延时1 (10)
.判断循环尾 ()

调试输出 (“任务执行完毕 或主动终止线程 正在执行销毁线程....”)
集_线程池.销毁 (1, , )
调试输出 (“线程池销毁完毕”)

集_任务工作中 = 假

[/e]
作者: a45167039    时间: 2025-5-10 04:58
在子线程里停止的地方加个调试输出你看看停止成功没有

补充内容 (2025-5-10 05:01):
还有就是你说的停不下来是线程一直在创建新的还是 没创建了但是在跑的线程没停下?
作者: 没事瞎琢磨    时间: 2025-5-10 08:38
主线程死循环 一直在创建
作者: Ruang    时间: 2025-5-10 09:30
停下的条件不触发,无法停下
作者: 萧楚楠    时间: 2025-5-10 10:46
根本停不下来~~~!
作者: lyie15    时间: 2025-5-10 11:11
程序里加个全局变量,用于进行循环的判断。子程序和主程序都可能根据判断来修改这个变量,这样就能实现对于多线程时的结束。

循环中加个判断。如果达成,则跳出循环

作者: 努力的小菜鸟    时间: 2025-5-10 11:16
跳出循环不就可以了
作者: henengyan    时间: 2025-5-10 23:08
a45167039 发表于 2025-5-10 04:58
在子线程里停止的地方加个调试输出你看看停止成功没有

补充内容 (2025-5-10 05:01):

线程一直在创建
作者: henengyan    时间: 2025-5-10 23:09
lyie15 发表于 2025-5-10 11:11
程序里加个全局变量,用于进行循环的判断。子程序和主程序都可能根据判断来修改这个变量,这样就能实现对于 ...

教教,有点笨
作者: henengyan    时间: 2025-5-10 23:09
没事瞎琢磨 发表于 2025-5-10 08:38
主线程死循环 一直在创建

说到精髓了
作者: henengyan    时间: 2025-5-10 23:09
努力的小菜鸟 发表于 2025-5-10 11:16
跳出循环不就可以了

就是不知道在哪跳出来现在
作者: henengyan    时间: 2025-5-10 23:20
后面我在主线程 .版本 2

            .如果真 (按钮_结束任务.标题 = “停下来啊”)
                线程_销毁 (集_主线程句柄)
                线程池_鱼刺.销毁 (0, )
                跳出循环 ()
            .如果真结束

这样去跳出循环,还是停不下来 呜呜呜
作者: coini    时间: 2025-5-11 00:33
在主线程子程序里  判断循环首(真)处   把’真‘ 替换为一个程序集变量 开始任务时  例如 将 集_任务工作中=真     然后判断循环首(集_任务工作中)




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