以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于多线程的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=119616)

--  作者:ap9709130
--  发布时间:2018/5/28 17:44:00
--  关于多线程的问题
老师,

我想用运用多线程来做各种统计表,现在遇到这个问题。

比如我的函数 : Functions.Execute("统计",a) 运行没有问题,可以生成我想要的统计表

然后我把它变成多线程

Public Sub thread_sub2(ByVal e As Object)
    functions. Execute("统计",e)
End Sub


Dim nthread As New System.Threading.Thread(AddressOf thread_sub2)
nthread.start(a)

但是会出错,出错提示:


图片点击可在新窗口打开查看此主题相关图片如下:错误.png
图片点击可在新窗口打开查看


--  作者:ap9709130
--  发布时间:2018/5/28 17:45:00
--  
我在函数中生成表的方法是这样的:

Dim q As new QueryBuilder
q.TableName = "利润查询"
q.C
q.SelectString = lm & " " & bm & " " & tj
q.Build


用多线程要怎么才能生成相关的表呢?

--  作者:有点甜
--  发布时间:2018/5/28 18:42:00
--  

多线程访问同一个资源(foxtable的资源,比如 addnew啊、save啊 等)的时候,会报错的,没办法。

 

必须单线程处理才行,如果希望后台处理,你在循环的过程中加入application.doevents,可以让你继续做其它操作。


--  作者:ap9709130
--  发布时间:2018/5/29 9:38:00
--  
甜老师

能再说的详细一些吗?怎么才能利用后台,并行运行。

我的情况是这样,因为生成统计的表比较复杂,我是用SQL语句生成的,大约要 20~30 秒,另外,我还要下载比较多的订单明细,也要40秒左右,但是这两个过程是完全独立的。

如果可以同步进行,那么经过优化可能 30秒以内可以全部搞定。如果顺序来,肯定超过1分钟,感觉不是太好。

--  作者:有点甜
--  发布时间:2018/5/29 9:40:00
--  

请做一个具体实例发上来说明你要做什么。

 

只要访问到foxtable资源,都不能用多线程处理,除非没有用到。


--  作者:ap9709130
--  发布时间:2018/5/29 14:17:00
--  
甜老师

因为是公司的系统,没有办法做实例。我就是想用一个外部数据源,然后能用多线程 来实际 sql 语句 生成两个datatable.然后把相关的信息在窗口中展示出来。

--  作者:有点甜
--  发布时间:2018/5/29 14:27:00
--  

没办法,你用到foxtable资源都不能使用多线程啊。

 

生成sql语句应该没问题的;不要一起生成table和显示出来;必须一个一个table生成。