使用Visual Basic 6實現真正實用的多執行緒處理
事實上使用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看看會怎麼樣? 這是我認為最簡單且穩固的多執行緒實現方法了,大家有什麼好的想法歡迎留言.
相關文章
- Java多執行緒並行處理任務的實現Java執行緒並行
- 3種方式實現python多執行緒併發處理Python執行緒
- 用Pthread實現多執行緒操作thread執行緒
- Java多執行緒的實現Java執行緒
- 用多執行緒,實現併發,TCP執行緒TCP
- 如何實現多執行緒執行緒
- Java之實現多執行緒的方式三:實現Callable介面(結合執行緒池使用)Java執行緒
- 多執行緒實現多工二執行緒
- 多執行緒實現多工一執行緒
- 使用Java實現多執行緒程式設計Java執行緒程式設計
- 使用多執行緒實現郵件傳送執行緒
- Java多執行緒實現方式Java執行緒
- 【unity】 Loom實現多執行緒UnityOOM執行緒
- JavaScript如何實現多執行緒?JavaScript執行緒
- Runnable介面實現多執行緒執行緒
- 多執行緒具體實現執行緒
- 面試-實現多執行緒的方式面試執行緒
- 多執行緒伺服器的實現執行緒伺服器
- Spring多執行緒事務處理Spring執行緒
- 前端多執行緒處理——async/await前端執行緒AI
- 多執行緒爬蟲實現(上)執行緒爬蟲
- 【連載 02】多執行緒實現執行緒
- 多工處理方式之二:多執行緒執行緒
- 5招教你實現多執行緒場景下的執行緒安全!執行緒
- Java高併發與多執行緒(二)-----執行緒的實現方式Java執行緒
- Java實現多執行緒的三種方式Java執行緒
- 多執行緒6執行緒
- 高併發IPC通訊實現:HarmonyOS中的非同步呼叫與多執行緒處理非同步執行緒
- Java之實現多執行緒的方式二:實現Runnable介面Java執行緒
- 如何使用queue模組實現多執行緒爬蟲執行緒爬蟲
- 用 UI 多執行緒處理 WPF 大量渲染的解決方案UI執行緒
- Java多執行緒之---用 CountDownLatch 說明 AQS 的實現原理Java執行緒CountDownLatchAQS
- iOS多執行緒之超實用理論+demo演示(可下載)iOS執行緒
- 使用Runnable介面實現執行緒的方法執行緒
- 【QT】QtConcurrent::run()+QThreadPool實現多執行緒QTthread執行緒
- 純Mutex實現多執行緒交替列印Mutex執行緒
- Python簡單實現多執行緒例子Python執行緒
- Java多執行緒【三種實現方法】Java執行緒
- 多執行緒基礎-基礎實現執行緒