首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB6里面多线程工程的正常退出有关问题

2012-01-06 
【分享】VB6里面多线程工程的正常退出问题与大家分享一下://这几天接了一个单子,是做一个客服系统的客服端,

【分享】VB6里面多线程工程的正常退出问题
与大家分享一下:

//

这几天接了一个单子,是做一个客服系统的客服端,服务器端与用户端都是现成的.

之前的客服端比较"卡",因为与服务器的通讯是采用同步POST与GET方式同网页交互.如果网速不理想或服务器响应不及时,那么在提交过程中当前线程会挂起.

由于普通EXE工程中UI与代码都是在同一线程里的,所以提交时整个程序就卡了.....

异步的话,整个工程结构又要有大改变.

于是我对此工程进行了多线程改造,使用ActiveX EXE的单元模型线程来工作.

单元线程虽然在线程间调度的开销比较大,但是我又不是大量地使用它,因此在当前条件下开销不是问题.

经过改造后,工程本身结构没有大的改变,却拥有非常爽的界面,真的很爽~~~ 

不过后来编译后,又有一个问题来了:程序不能正确退出,必须结束进程.

这算哪门子问题?我把所有处于单独线程的对象都正确的释放了啊!

弄了一个晚上,都没有结果.

试过遍历Forms集合,卸载所有窗体;而窗体里每个对象的释放也都是正确的.

可没用.

我甚至在程序里调用ExitProcess,仍然没用.

最终在任务管理器里看,线程总是还有那么几个多余的.

真的是怪了!!

后来到了两点左右,肚子也饿了,就啃了点饼.

啃着啃着,突然想到,Forms集合是不是没用了?

因为这是"单元",当一个单元创建后,在别的单元里创建的公共对象,比如将某窗体Show出来了,那么在本单元内,应该仍然是不可见的!

有思路了,就马上改代码,把那个For Each In Forms的遍历循环改成手工UNLOAD每一个窗体.

编译,运行,退出---------------哈!行了!

原来,在创建单元时,是把当前的环境"复制"一份到单元里面;因此当一个单元创建成功后,单元外的环境如果改变了,对于已经创建的单元来说,是没有改变的!

怪不得MSDN里也说,"每个线程有一份自己的全局数据副本,这意味着不能使用全局数据在不同线程的对象之间进行通讯".

这个问题,应该算是弄明白了吧:)

收获不小. 

PS:

大家觉得VB6的这种多线程的优点在哪?缺点在哪?

[解决办法]
学习

引用楼主 myjian 的帖子:
PS:

大家觉得VB6的这种多线程的优点在哪?缺点在哪?

[解决办法]
优点:稳定 缺点:占用资源太多
[解决办法]
你把For Each In Forms的遍历循环改成手工UNLOAD每一个窗体,有点不可思议。本质上是没有区别,这里面肯定有名堂!
至于优点:就是速度快,但不稳定;缺点是占用资源太多。
WMP控件就是一个多线程的,用WMP播放比用MCI命令播放占用的资源明显多得多!
[解决办法]
多线程通信需要做好线程同步,全局变量保护等操作...
[解决办法]
看了下 你们说的,我想开销大概就是老马说的'全局'副本吧
[解决办法]
我来接分的
[解决办法]
我看了,CPU开销很高,50%以上,跟没用doevents有关。
[解决办法]
jf
[解决办法]
还没正儿八经搞过多线程呢,向老马学习!
[解决办法]
引用楼主 myjian 的帖子:

使用ActiveX EXE的单元模型线程来工作

[解决办法]
顶一个
[解决办法]
探讨
模态窗体应该处于当前线程的最顶级,但不是系统的顶层.....

想到顶层,你可以用SetWindowlong添加一个topmost样式.


[解决办法]
多线程的问题还没整过,学习
[解决办法]
老马我有几个问题:
1.怎么在你这个程序中加入MDI窗体
2.怎么定义带有WITHEVENTS对像数组


[解决办法]
我做过一个完整的这类系统(资讯通)


全部工程只有二部份组成
1.客户端:是一个飘浮旗帜广告,由js完成,利用ajax与MS-SQL2000进行联系,这样做的优势在于软件不管卖给谁,都与购者买网站无关,当然了,如果他的web不支持ajax那就....... 客户端脚本由服务器端配置好数据库IP后自动生成!放到网站上去就成 :)
2.服务端:由纯VB6.0完成,利用到了多线程来监听99999端口数据流量,当有数据流量时即与数据库发生关联,读取即时数据到UI

实际出售时,客户将只拿到一个服务器端,以及一本说明书.



[解决办法]
老马的整个过程,一直在消耗内存,如果可以的话,你可以将你的生成代码,用循环来做看看可以创建多少个线程
------解决方案--------------------


UP
[解决办法]
哇!最近就研究多线程了,上次有关多线程的小问题还多亏老马帮助,在我眼中,此贴更是石破天惊啊!
谁说VB不如人,那要看用的是什么人
[解决办法]
嘿嘿,刚开始vb很多都看不懂!
[解决办法]

探讨
我做过一个完整的这类系统(资讯通)


全部工程只有二部份组成
1.客户端:是一个飘浮旗帜广告,由js完成,利用ajax与MS-SQL2000进行联系,这样做的优势在于软件不管卖给谁,都与购者买网站无关,当然了,如果他的web不支持ajax那就....... 客户端脚本由服务器端配置好数据库IP后自动生成!放到网站上去就成 :)
2.服务端:由纯VB6.0完成,利用到了多线程来监听99999端口数据流量,当有数据流量时即与数据库发生关联,读取即时数据到UI …

[解决办法]
探讨
老马我有几个问题:
1.怎么在你这个程序中加入MDI窗体
2.怎么定义带有WITHEVENTS对像数组

[解决办法]
奇怪哦,怎么我刚学VB的时候很多人说VB不能做多线程的,所以一直没去关注VB在多线程方面的东西
[解决办法]
学习
[解决办法]
学习
[解决办法]
哇! 你们好厉害啊! 我都不会

[解决办法]
你们教教我啊!
[解决办法]
不懂,up
[解决办法]
jf
[解决办法]
好文章,我顶了!
[解决办法]
我来学习
[解决办法]
学习中
[解决办法]
好贴,收藏
[解决办法]
学习中
[解决办法]
我还没做过,多线程的学习
[解决办法]
很难
[解决办法]
傲气
[解决办法]
顶呀
[解决办法]
嗯,支持一下,还是不错的。多谢分享!!
[解决办法]
看的不是很懂!高手很多啊!
[解决办法]
学习了, VB6.0支持多线程通信吗????
[解决办法]
[color=#FF6600][/color]第一次看到,关于VB的多线程问题,狂汗,学习中。。。。
[解决办法]
xuexi
[解决办法]
好贴了
强顶
[解决办法]
对这方面不是很懂UP下!
[解决办法]
老马,看着这么多渴望学习VB多线程知识的眼睛,
能否麻烦你出一篇文章,给介绍介绍VB中多线程的使用。。
谢谢!!!
因为我也不会。。很想学习!!!!
[解决办法]
我是自己写了一个函数 ~ 在丢弃对一个对象的引用前调用
卸载所有该对象调用的窗体对象
------解决方案--------------------


学习了。。。强人啊~
[解决办法]
学习一下啊
[解决办法]

探讨
引用:
我做过一个完整的这类系统(资讯通)


全部工程只有二部份组成
1.客户端:是一个飘浮旗帜广告,由js完成,利用ajax与MS-SQL2000进行联系,这样做的优势在于软件不管卖给谁,都与购者买网站无关,当然了,如果他的web不支持ajax那就....... 客户端脚本由服务器端配置好数据库IP后自动生成!放到网站上去就成 :)
2.服务端:由纯VB6.0完成,利用到了多线程来监听99999端口数据流量,当有数据流量时即与数据库…

[解决办法]
我在VB6里面是用Timer控件数组来模拟多线程的。
[解决办法]
太复杂了。

[解决办法]
探讨
我在VB6里面是用Timer控件数组来模拟多线程的。

[解决办法]
我本人没有实现过多线程,也没看过VB真正实现稳定[color=#FF0000][/color]的多线程。
[解决办法]
还有分没?呵呵,纯粹来学习+接分

热点排行