递归火山软件开发平台

标题: 【求助】n个线程池是如何动态调用的呢?谢谢! [打印本页]

作者: jcos    时间: 2024-12-30 15:56
标题: 【求助】n个线程池是如何动态调用的呢?谢谢!
纯小白刚在研究自学,想请问大神个问题
不知用什么线程池好,可以用数组开池(因为不知用多少个池),每个池子里有多个线程,不同池对应不同类型的任务。
比如说,报表中有100行。1-50行用一个池子让它从1-50慢慢按顺序执行。另一个池子从50-100,也是慢慢从50-100执行。开两个池,是为了同时执行1-50的和50-100的报表项上的任务等


麻烦大神抽空帮写个例子,非常感谢!

作者: suyan    时间: 2024-12-30 16:11
一个电脑,同时运行的线程数是固定的,开1个池就能跑满了,开那么池干什么呀,

作者: jcos    时间: 2024-12-30 16:25
suyan 发表于 2024-12-30 16:11
一个电脑,同时运行的线程数是固定的,开1个池就能跑满了,开那么池干什么呀,
...

因为想同时执行不同的任务,每个线程池都 有一定的任务量,但不同的池有着不同的任务。
是想让不同的任务量能同时执行。
就好比,有三个人,每个人去做十件不同的事,他们各做各的,但是同时执行的。
而不是所有事全部一起做。

或者有什么别的方式么?

一个报表中一般是有一千行,比如每100行是一个线程做的,这样就需要10个线程。
我只是想说,如何让这十个线程同时去做自己的那一百行任务,而那每个线程的一百个任务是需在一个一个的去执行的
作者: suyan    时间: 2024-12-30 16:35
一个线程池即可,不同用户标记,做不同任务
作者: jcos    时间: 2024-12-30 16:36
suyan 发表于 2024-12-30 16:35
一个线程池即可,不同用户标记,做不同任务

嗯嗯,我现在正在研究,还不懂,大神有空么?麻烦帮我写个例子呗,万分感谢
作者: jcos    时间: 2024-12-30 17:15
suyan 发表于 2024-12-30 16:35
一个线程池即可,不同用户标记,做不同任务

谢谢,我用https://bbs.voldp.com/forum.php?mod=viewthread&tid=14940
线程池,有一个线程id来区分线程,分别执行了对应的表项任务,算是实现了我的想法了

  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 方法 线程池类_线程运行 <接收事件 类型 = 整数 折叠>
  3. 参数 来源对象 <类型 = 线程池类>
  4. 参数 标记值 <类型 = 整数>
  5. 参数 线程ID <类型 = 整数>
  6. 参数 线程句柄 <类型 = 变整数>
  7. 参数 用户参数 <类型 = 变整数>
  8. 参数 退出事件 <类型 = 变整数>
  9. {
  10.     如果 (来源对象 == 线程池1)
  11.     {
  12.         // 标签1.调用反馈事件 (0, 线程ID, 假)  // 线程中不能直接更新窗口界面,可能会导致死锁. 下同
  13.         调试输出 (线程ID)

  14.         如果 (线程ID == 1)
  15.         {
  16.             计次循环 (超级列表框1.取表项数 ())
  17.             {
  18.                 如果 (超级列表框1.取标题 (取循环索引 (), 2) == "1")
  19.                 {
  20.                     超级列表框1.置标题 (取循环索引 (), 3, "执行1")
  21.                     程序_延时 (5, 1)
  22.                     超级列表框1.置标题 (取循环索引 (), 3, "完成1")

  23.                     // 标签1.调用反馈事件 (1, 取循环索引 (), 假)
  24.                 }

  25.             }

  26.         }

  27.         如果 (线程ID == 2)
  28.         {
  29.             计次循环 (超级列表框1.取表项数 ())
  30.             {
  31.                 如果 (超级列表框1.取标题 (取循环索引 (), 2) == "2")
  32.                 {
  33.                     超级列表框1.置标题 (取循环索引 (), 3, "执行2")
  34.                     程序_延时 (5, 1)
  35.                     超级列表框1.置标题 (取循环索引 (), 3, "完成2")

  36.                     // 标签1.调用反馈事件 (2, 取循环索引 (), 假)
  37.                 }

  38.             }

  39.         }

  40.         // 进行你自己的工作 ...
  41.         // 标签1.调用反馈事件 (2, 线程ID, 假)
  42.     }
  43.     返回 (0)
  44. }
复制代码



作者: suyan    时间: 2024-12-30 22:10
jcos 发表于 2024-12-30 17:15
谢谢,我用https://bbs.voldp.com/forum.php?mod=viewthread&tid=14940
线程池,有一个线程id来区分线程 ...

仰望大佬的线程池2.投递任务时的第1个参数,就可以用来区分不同任务
作者: jcos    时间: 2025-1-1 01:50
suyan 发表于 2024-12-30 22:10
仰望大佬的线程池2.投递任务时的第1个参数,就可以用来区分不同任务

好的,谢谢,我研究一下先




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4