在VB中實現多執行緒

2021-03-31 08:56:57 字數 2779 閱讀 1237

'功能:建立多執行緒類,用於初始化執行緒。   類名:cls_thread

'呼叫方法:1.宣告執行緒類物件變數 dim mythread as cls_thread

'          2.呼叫形式:with mythread

'                         .initialize addressof 自定義過程或函式名 '(初始化執行緒) .

'                         .threadenabled = true                  '(設定執行緒是否啟用)

'                      end with

'          3.終止呼叫: set mythread = nothing

'   email:lixun007@163.***

'   test on: vb6.0+win2000  and  vb6.0+winxp     it's pass !

option explicit

'建立執行緒api

'此api經過改造,lpthreadattributes改為any型,lpstartaddress改為傳值引用:

'因為函式的入口位址由形參變數傳遞,如果用傳址那將傳遞形參變數的位址而不是函式的入口位址

private declare function createthread lib "kernel32" (byval lpthreadattributes as any, byval dwstacksize as long, byval lpstartaddress as long, lpparameter as any, byval dwcreationflags as long, lpthreadid as long) as long

'終止執行緒api

private declare function terminatethread lib "kernel32" (byval hthread as long, byval dwexitcode as long) as long

'啟用執行緒api

private declare function resumethread lib "kernel32" (byval hthread as long) as long

'掛起執行緒api

private declare function suspendthread lib "kernel32" (byval hthread as long) as long

private const create_suspended = &h4    '執行緒掛起常量

'自定義執行緒結構型別

private type udtthread

handle as long

enabled as boolean

end type

private metheard as udtthread

'初始化執行緒

public sub initialize(byval longpointfunction as long)

dim longstacksize as long, longcreationflags as long, lpthreadid as long, longnull as long

on error resume next

longnull = 0

longstacksize = 0

longcreationflags = create_suspended         '建立執行緒後先掛起,由程式啟用執行緒

'建立執行緒並返執行緒控制代碼

metheard.handle = createthread(longnull, longstacksize, byval longpointfunction, longnull, longcreationflags, lpthreadid)

if metheard.handle = longnull then

msgbox "執行緒建立失敗!", 48, "錯誤"

end if

end sub

'獲取執行緒是否啟用屬性

public property get threadenabled() as boolean

on error resume next

enabled = metheard.enabled

end property

'設定執行緒是否啟用屬性

public property let threadenabled(byval newvalue as boolean)

on error resume next

'若啟用執行緒(newvalue為真)設為true且此執行緒原來沒有啟用時啟用此執行緒

if newvalue and (not metheard.enabled) then

resumethread metheard.handle

metheard.enabled = true

else          '若啟用執行緒(newvalue為真)且此執行緒原來已啟用則掛起此執行緒

if metheard.enabled then

suspendthread metheard.handle

metheard.enabled = false

end if

end if

end property

'終止執行緒事件

private sub class_terminate()

on error resume next

call terminatethread(metheard.handle, 0)

end sub

在VB中建立多執行緒

在vb中建立執行緒用到以下幾個api函式 建立執行緒api 此api經過改造,lpthreadattributes改為any型,lpstartaddress改為傳值引用 因為函式入口位址是由形參變數傳遞,如果用傳址那將傳遞形參變數的位址而不是函式的入口位址 引數dwstacksize為應用程式堆疊大...

VB中的多執行緒

本來上網檢視了一些文章,都說vb中多執行緒非常不穩定,很容易造成程式崩潰。然後我也寫了乙個簡單的例子嘗試,執行後,果然崩潰,而且後來造成vb程式損壞,重灌了好幾次vb,vb本身並不提供多執行緒,如果要使用,可以通過呼叫api函式實現,下面的總結是實現vb多執行緒的一些基本方法 l建立執行緒 decl...

在C Builer中多執行緒的實現

還在dos時代,人們就在尋求一種多工的實現。於是出現了tsr型別的後台駐留程式,比較有代表性的有side kick vsafe等優秀的tsr程式,這類程式的出現和應用確實給使用者使用計算機帶來了極大的方便,比如side kick,我們程式設計可以在不用進編輯程式的狀態下,一邊編輯源程式,一邊編譯執行...