'功能:建立多執行緒類,用於初始化執行緒。 類名: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,我們程式設計可以在不用進編輯程式的狀態下,一邊編輯源程式,一邊編譯執行...