科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件如何在VB6里面实现稳定的多线程

如何在VB6里面实现稳定的多线程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

微软官方给出的方案在MSDN里面有说,就是使用ActiveX EXE那种"单元线程模型".hEvent =CreateEvent(0&, False, False, MyEvent) '在单元线程下,模块里的全局变量已经没有用了.

作者:myjian 来源:CSDN 2008年3月3日

关键字: 多线程 VB6 Windows

  • 评论
  • 分享微博
  • 分享邮件

  微软官方给出的方案在MSDN里面有说,就是使用ActiveX EXE那种"单元线程模型".

  我也曾经试过,的确可以实现"多线程",只是由于要多一个EXE,比较麻烦,后来就没有深入了.

  结果一次无意中在VBGOOD中看到一段代码,才打通了一个关节:为什么不直接使用ActiveX EXE写程序呢?!

  那段代码里面,是直接使用这种工程类型,然后在工程内使用CreateObject来生成一个新对象,这样的话,新的对象就工作于一个单元线程内了.

  其实这个我也知道,可是就没有想到在ActiveX EXE内部使用

  看来思路真的不如人.....还要多多学习,多多积累.

  ActiveX EXE工程设置为"独立启动"后,貌似只能从Sub Main里进行初始化.

  而每个对象的建立,都会调用一次这个过程,因此这个过程需要一次性运行.

  但是MSDN里说得很清楚,在单元线程模型里面,全局变量的范围只能是本单元,因此不能使用设置全局变量来完成这个过程的一次运行逻辑.

  原代码里使用了GetProp等方式,感觉不是很好,于是作了一下改进,使用事件对象来完成此工作.

  Sub Main相关代码如下:

  VBScript code

  

  PrivateConstMyEvent AsString="m5home"

  DimhEvent AsLong

  

  SubMain()

  IfGetEventHandle =0Then'由于每个新对象的建立,都要执行Main()过程,因此使用事件对象来进行判断.

  hEvent =CreateEvent(0&, False, False, MyEvent) '在单元线程下,模块里的全局变量已经没有用了.

  frmMain.Show

  EndIf

  End Sub

  

  PrivateFunctionGetEventHandle() AsLong

  GetEventHandle =OpenEvent(EVENT_ALL_ACCESS, False, MyEvent)

  CallCloseHandle(GetEventHandle)

  End Function

  

  PublicFunctionQuit()

  CallCloseHandle(hEvent)

  End Function

  PrivateConstMyEvent AsString="m5home"

  DimhEvent AsLong

  SubMain()

  IfGetEventHandle =0Then'由于每个新对象的建立,都要执行Main()过程,因此使用事件对象来进行判断.

  hEvent =CreateEvent(0&, False, False, MyEvent) '在单元线程下,模块里的全局变量已经没有用了.

  frmMain.Show

  EndIf

  End Sub

  PrivateFunctionGetEventHandle() AsLong

  GetEventHandle =OpenEvent(EVENT_ALL_ACCESS, False, MyEvent)

  CallCloseHandle(GetEventHandle)

  End Function

  PublicFunctionQuit()

  CallCloseHandle(hEvent)

  End Function

    

  由于事件对象是系统范围的,因此可以比较完美的完成这个工作.

  同时事件对象在进程消失后,会自动释放,也方便:)

  示例代码可以生成一个新的单元线程,并在这个线程里面显示一个窗体,窗体进行一个大循环.

  循环内没有放入DoEvents函数,因此会造成循环所在窗体无响应.

  而此时主窗体不受影响.

  对象间可以通过一般的调用与事件来进行通讯.

  完整的代码,在此下载:

  http://www.m5home.com/blog/article.asp?id=54

  希望能为没落的VB6带来一丝活力:)

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章