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

visual|多线程

 
事实上使用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看看会怎么样? 这是我认为最简单且稳固的多线程实现方法了,大家有什么好的想法欢迎留言.

时间: 2024-08-02 12:46:19

使用Visual Basic 6实现真正实用的多线程处理的相关文章

Visual Basic 9.0概述

简介 Visual Basic 一直以生成实用的.面向数据的业务线应用程序为中心.尽管迁移到 .NET 为应用程序开发人员带来了统一的框架和托管平台,但是下一版本的 Visual Basic 包括一组对开发人员构建面向数据的应用程序时的工作效率影响深远的功能.这些语言扩展引入了适用于所有数据源的通用查询工具,不管是关系对象图.分层对象图还是 XML 文档. 本文档将简略介绍这些新增功能. Visual Basic 9.0 入门 要查看这些语言功能的实际作用,让我们首先看一个真实的示例 - CIA

Visual Basic .NET处理Excle表格全接触

visual Visual Basic .Net处理Excel表格机理和处理Word文档一样,也是通过互操作,引入COM组件来实现的,所以前提条件是运行本文中介绍的程序的计算机必须安装Office 2000中的Excel软件.如果计算机安装的Office 2000,那么这个COM组件就是"Microsoft Excel 9.0 Object Library".一旦引入此COM组件,Visual Basic .Net就可以向手工编辑Excel表格一样来处理它.下面就来介绍Visual B

在 Visual Basic .NET 中使用存储过程(1)

visual|存储过程 在 Visual Basic .NET 中使用存储过程 Billy Hollis 2002年9月14日 从 MSDN Code Center 下载 StoredProcVB.NET.exe 示例文件(英文).(http://msdn.microsoft.com/code/default.asp?url=/code/sample.asp?url=/msdn-files/026/002/872/msdncompositedoc.xml) 摘要:Billy Hollis 解释了

与Visual Basic .NET一起使用.NET Framework(转)

visual 使用.NET Framework,Microsoft Visual Basic开发人员可以创建健壮的.在先前的Visual Basic版本中很难编写的应用程序.本文将讨论使用.NET Framework的好处,并且将包括一些功能强大的.Visual Basic开发人员可以与该框架一起使用的特性,包括多线程和线程池(thread pooling).Windows服务和文件系统监控等. 为什么使用框架 单词框架(framework)有几种含意.在这种情况中,它指的是创建和运行应用程序的

《Visual Basic 2012入门经典》----1.4 修改对象的属性

1.4 修改对象的属性 Visual Basic 2012入门经典在Visual Basic中,几乎所有您与之打交道的都是对象.例如,窗体是对象,可放在窗体中以构建用户界面的元素(如列表框和按钮)也是对象.有很多种对象,它们是根据类型进行分类的.例如,窗体是Form对象,而窗体上的元素为Control对象(控件),第3章将详细讨论对象.有些对象没有物理外观而只存在于代码中,本书后面将介绍这种对象. 警告: 读者将发现,本书经常会提到后续章节介绍的内容.在出版界,这称为前向引用.出于某种原因,这常

利用Visual Basic操作XML数据

visual|xml|数据 什么是XML 扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用. XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引.排序.查找.相关一致性等,XML仅仅是展示数据.事实上XML与其他数据表现形式最大的不同是:他极其简单.这是一个看上去有点琐细的优点,但正是

调试 ASP 中使用的 Visual Basic COM 组件

概要本分步指南介绍了如何调试(或逐步执行)在 Active Server Pages (ASP) 页中使用的 Microsoft Visual Basic (VB) 组件对象模型 (COM) 组件. 调试 ASP 页中使用的 VB COM 组件 在开始菜单中指向程序,指向 Microsoft Visual Studio 6.0,然后单击 Microsoft Visual Basic. 在 Visual Basic 中,打开您要调试的 COM 组件项目,并在希望调试的位置设置断点.为此,单击希望调

创建 Visual Basic COM 组件在 ASP 中使用

概要本分步指南介绍了如何创建组件对象模型 (COM) 组件供在 Active Server Pages (ASP) 中使用.  供 ASP 使用的 COM 组件 在 Visual Basic 中创建一个新的 ActiveX DLL 项目. 将项目命名为 VBASPProject,将类命名为 VBASPClass. 将下面的公共方法粘贴到类模块中: Public Function GetString() As String' Return the string Hello World!GetStr

Visual Basic .NET 代码示例:与 Windows 服务交互 (2003年2月17日)

Visual Basic .NET 代码示例:与 Windows 服务交互 (2003年2月17日) 此示例显示了如何通过代码控制已安装的 Windows 服务. http://www.microsoft.com/china/msdn/library/dnvssamp/html/vbcs_InteractingwithaWindowsService.asp