VB6稳定多线程,一直是争论很大的的。
比较稳定的多线程,一般使用
set MT=CreateObject("VbMT.MT")
但其他单元线程之间,是无法访问的,只有在创建者中,才可使用该对象MT.
还有一个问题,如果设置单元线程停止,一般通过设置属性,比如MT.bStop=True,设停止参数,
然后再单元线程中通过检测bStop而退出的。
但问题来了,如果单元线程挂起,通过MT.bStop=True,会让当前线程死锁状态。程序不能执行下去的。
所以问题来了,不能通过设置对象的属性方法了。这个时候,必须通过地址方法设置。
所以,取得类模块的函数地址,变量地址,通过回调函数函数指针,直接执行函数,是不会死锁的。
下面给出求类模块函数地址的方法:
Private Function GetClassProcAddress(ByVal SinceCount As Long) As Long
'***************************************************************************************************
' VB6 历史上最简单的获取类中指定函数地址的函数诞生了,can be get address of property to value ,too
'***************************************************************************************************
Dim i As Long, jmpAddress As Long
CopyMemory i, ByVal

本文探讨了VB6环境下实现稳定多线程的方法,通过创建对象如`VbMT.MT`来避免线程间的不安全访问。然而,设置线程停止时直接修改对象属性可能导致死锁。为解决此问题,文章提出通过函数地址和回调函数调用类模块函数,以防止死锁。此外,由于VB6不支持函数指针,建议使用VC6编写DLL函数以完成类模块函数的调用。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



