使用Visual Basic 6实现真正实用的多线程处理

原创 2005年05月27日 14:57:00

事实上使用Visual Basic的ActiveX exe技术可以轻松的实现多线程处理.

原理先不说了,先举个示例,有兴趣的话大家可以一起讨论

1.新建一个工程,类型选择ActiveX Exe,工程重命名为TestExe
在工程中添加一个Form,放上一个Timer控件.
将Class1改名为clsTest,注意其Instancing要设置为5-MultiUse, 以下是其代码:

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private WithEvents oTimer As Timer
Private frmTmp As Form1
Private lTotalLoop As Long
Private bDoStop As Boolean
Private lInterval As Long

Public Event Progress(ByVal lProgress As Long)


Public Sub StartSub(ByVal lTotal As Long)
    lTotalLoop = lTotal
    oTimer.Enabled = True
End Sub

Public Sub StopSub()
    bDoStop = True
End Sub

Private Sub Class_Initialize()
    Set frmTmp = New Form1
    Load frmTmp
    Set oTimer = frmTmp.Timer1
    oTimer.Enabled = False
    bDoStop = False
    lInterval = 1
End Sub

Private Sub DoLoop()
    Dim i As Long
    For i = 0 To lTotalLoop
        Sleep (lInterval)
        RaiseEvent Progress(i)
       
        If bDoStop = True Then
            Exit Sub
        End If
       
    Next
End Sub

Private Sub Class_Terminate()
    Unload frmTmp
    Set frmTmp = Nothing
    Set oTimer = Nothing
End Sub

Private Sub oTimer_Timer()
    oTimer.Enabled = False
    DoLoop
End Sub

Public Property Get lMillisecs() As Long
    lMillisecs = lInterval
End Property

Public Property Let lMillisecs(ByVal vNewValue As Long)
    lInterval = vNewValue
End Property

在TestExe Property(工程属性)的Threading Model中,设置Thread per Object,或者选择Thread pool中设置大于1的数值.如把Thread pool设置为2, 则调用此ActiveX Exe最多能同时有两个线程, 更多的请求将放置于队列中.
编译TestExe

下面来测试我们的多线程程序:

新建一个Standard Exe工程,在Reference中选择刚刚做好的TestExe.exe
在Form1中添加两个ListBox,两个CommandButton,Command1为开始,Command2为停止
以下是Project1.Form1的代码:

Option Explicit
Private WithEvents oTest1 As TestEXE.clsTest
Private WithEvents oTest2 As TestEXE.clsTest

Private Sub Command1_Click()
    Set oTest1 = New TestEXE.clsTest
    oTest1.lMillisecs = 100
    oTest1.StartSub (1000)
   
    Set oTest2 = New TestEXE.clsTest
    oTest2.lMillisecs = 100
    oTest2.StartSub (1000)
End Sub

Private Sub Command2_Click()
    oTest1.StopSub
    oTest2.StopSub
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set oTest1 = Nothing
    Set oTest2 = Nothing
End Sub

Private Sub oTest1_Progress(ByVal lProgress As Long)
    List1.AddItem lProgress
    List1.ListIndex = List1.ListCount - 1
End Sub

Private Sub oTest2_Progress(ByVal lProgress As Long)
    List2.AddItem lProgress
    List2.ListIndex = List2.ListCount - 1
End Sub

启动Project1,点击Command1,怎么样,看见来效果了吗? 试着把TestExe的Thread pool改成1看看会怎么样? 这是我认为最简单且稳固的多线程实现方法了,大家有什么好的想法欢迎留言.

版权声明:本文为博主原创文章,未经博主允许不得转载。

Visual Basic for Applications 学习笔记(一)

一 创建新工作簿 如果要用 Visual Basic 创建新的工作簿,应使用 Add 方法。下述过程创建了新工作簿。Microsoft Excel 自动将该工作簿命名为“BookN”,其中 N 是下一...
  • DeRoshia
  • DeRoshia
  • 2007年01月19日 14:16
  • 806

关于Visual Basic .Net 学习书籍推荐

    程序的学习一直没有接受过正规系统的培训,不过发现有带着特定的目的,边学边用入门是很快的,而要理解得比较深刻,能开发出中等规模的程序,还需书籍的系统学习。最近在学习VB2008数据库编程中,浏览...
  • setoy
  • setoy
  • 2010年03月05日 21:43
  • 1907

Service Pack 6 for Visual Basic 6.0, Visual C++ 6.0 with Visual Source Safe 6.0d下载

下载VC6.0的SP6补丁,网址http://www.microsoft.com/en-us/download/details.aspx?id=9183 补充: 英文版  http://...
  • wanyecheng
  • wanyecheng
  • 2012年11月01日 20:47
  • 433

知识库文章MDL9720560-File: Visual Basic 6 IDE鼠标滚轮支持插件

File: Visual Basic 6 IDE鼠标滚轮支持插件 文件名称:VB6IDEMouseWheelAddin.dll文件大小:安装包约9KB ,解压后约32KB授权方式:免费出品人:Micr...
  • matrikmare
  • matrikmare
  • 2005年02月15日 18:02
  • 898

Visual Basic快捷教程——函数与子程序

函数是结构化程序设计的基础。函数的本质就是为了把程序切分成若干个相对独立的模块各司其职,而各个函数的作用也就是仅仅专门负责自己份内的那份功能。在Visual Basic中,函数是一组以Function...
  • baimafujinji
  • baimafujinji
  • 2017年04月19日 22:30
  • 3099

同时使用 Visual Basic 6 和 Visual Basic.NET 的最佳做法

 本页内容 概述 了解 Visual Basic 6...
  • naive1010
  • naive1010
  • 2006年07月05日 19:13
  • 2738

Visual Basic 6.0安装教程

Visual Basic 6.0安装教程 1、准备工作: 下载软件 2、安装Visual Basic 6.0的步骤 ① 把下载的压缩包解压出来。 ② 在解压出来的文件夹VB60...
  • u013677841
  • u013677841
  • 2014年02月16日 17:35
  • 989

Visual Basic不可能消失(转)

[文章信息]作者:陶刚编译时间:2004-09-07出处:天极网[文章导读]近十年以来人们一直预言Visual Basic会消亡,但即使出现VB.NET后,一切都未发生改变直以来,学者们都预言Visu...
  • tomkai
  • tomkai
  • 2004年11月08日 11:52
  • 740

Visual Basic 的基本数据类型

VB提供了11种基本数据类型,另外也可以自定义数据类型.这11种类型分别是:Byte(字节型)、Integer(整形)、Long(长整型)、Single(单精度浮点型)、Double(双精度浮点型)、...
  • bodohacker
  • bodohacker
  • 2006年08月26日 13:47
  • 1509

利用Visual Basic操作XML数据

利用Visual Basic操作XML数据 标签: xmlbasic文档stringmicrosoft存储 2007-07-23 11:24 2138人阅读 评论(0) 收藏 举报 ...
  • rainbow8966
  • rainbow8966
  • 2016年09月14日 15:55
  • 310
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Visual Basic 6实现真正实用的多线程处理
举报原因:
原因补充:

(最多只允许输入30个字)