Foxtable(狐表)用户栏目专家坐堂 → [求助]嵌套循环如何使用异步线程


  共有2348人关注过本帖树形打印复制链接

主题:[求助]嵌套循环如何使用异步线程

帅哥哟,离线,有人找我吗?
zpsun2003
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:130 积分:1250 威望:0 精华:0 注册:2018/4/19 21:34:00
[求助]嵌套循环如何使用异步线程  发帖心情 Post By:2018/10/20 22:44:00 [只看该作者]

上一次将需要调用或赋值表及控件的都在程序循环前通过变量替代,效率提升很明显,但无奈计算量还是太大,应该还要用上异步线程,请问老师以下代码如何可以用上异步线程,每一个循环变量都在后续的运算中需要调用 For i31 As Integer = 0 To txzjtxdzjh1.Count-1 '铁芯直径及低压匝数循环 txzjtxdzcs = txzjtxdzjh(i31) ...其他代码(用txzjtxdzcs变量循环运算) For i32 As Integer = 0 To dyxghjh1.Count-1 dyxghcs = dyxghjh(i32) dyxgkcs = dyxgkjh(i32) ...其他代码(用dyxghcs及dyxgkcs变量循环运算) For i33 As Integer = dydtezxjlxhmincs To dydtezxjlxhmaxcs Step dydtezxjlxhbjcs '低压到铁扼最小距离循环 dyxqdtezxjlcs = i33 ...其他代码(用dyxqdtezxjlcs变量循环运算) For i34 As Integer = gyxqcsxhmincs To gyxqcsxhmaxcs Step gyxqcsxhbjcs '高压线圈层数循环 gyxqcscs = i34 ...其他代码(用gyxqcscs变量循环运算) For i35 As Integer = 0 To gyxghjh1.Count-1 gyxghcs = gyxghjh(i35) gyxgkcs = gyxgkjh(i35) ...其他代码(用gyxghcs 及gyxgkcs变量运算) txzjtxdzjh2.Add(txzjtxdzcs) ‘将符合条件的参数存入以下集合中 dyzsjh2.Add(dyzscs) dyxghjh2.Add(dyxghcs) dyxgkjh2.Add(dyxgkcs) gyxghjh2.Add(gyxghcs) gyxgkjh2.Add(gyxgkcs) gycsjh1.Add(gyxqcscs) dydtezxjljh1.Add(dyxqdtezxjlcs) Next Next Next Next Next
[此贴子已经被作者于2018/10/20 22:44:13编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/21 12:51:00 [只看该作者]

具体做个实例发上来测试。

 回到顶部
帅哥哟,离线,有人找我吗?
zpsun2003
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:130 积分:1250 威望:0 精华:0 注册:2018/4/19 21:34:00
  发帖心情 Post By:2018/10/21 22:05:00 [只看该作者]

做了一个截面积计算的例子,里面有正常循环嵌套的计算和用异步多线程的计算,主线程计算用时确实很快,但发现几个问题:
1、用异步线程全部计算完的时间比正常计算时少用了大约一半,但时间还是太长了
2、用异步线程计算时在运行子线程时cpu基本是满的状态,这个怎么解决?
3、另外将子线程改为简单计算,用时非常短的情况,如果将异步线程个数放大很多,反而不如正常计算时用时短,异步线程个数有没有什么限制
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目3.table



备注:1、运行中没有显示异步线程计算中子线程全部计算完成所用时间(不知道怎么写代码了);
2、表中集合存档数据忘记清空了。
[此贴子已经被作者于2018/10/21 22:12:26编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/21 22:26:00 [只看该作者]

1、例子不知道你到底要表达什么。

 

2、异步计算,不影响主进程的运行,并不会提升执行效率。而且不是什么代码都可以拆分成多个异步执行的。

 

如果不能拆分多个异步,只能用一个异步,功能就类似你 application.doevents

 

3、cpu的问题就是这样,你用application.doevents基本也会这样。

 

4、具体问题具体分析,看不懂你例子表达的意思以及你希望帮你把例子弄成怎样的效果。


 回到顶部
帅哥哟,离线,有人找我吗?
zpsun2003
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:130 积分:1250 威望:0 精华:0 注册:2018/4/19 21:34:00
  发帖心情 Post By:2018/10/22 9:59:00 [只看该作者]

老师,用异步线程计算,如果分的线程个数是10个,子线程如果执行一次用5s,所有子线程都执行完的时间理论是不是应该是5s,但实际测试时大概用10*5/2=25s呢

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/22 10:44:00 [只看该作者]

 

多线程只是比单线程要快,快多少并没有定论。多线程只是提升cpu的利用率,充分利用cpu闲置资源而已。

 


 回到顶部