VB無所不能之七:VB的多線程(2)

來源:互聯網
上載者:User

VB無所不能之七:VB的多線程(2)作者:鐘聲

友情連結(非廣告,完全是出於友情):雲查殺很牛X的金山毒霸!免費啦!2011下載連結!

        久違啦,我今天終於又可以寫部落格了,VB無所不能這個系列寫作途中總是磕磕絆絆的,終於寫到第七篇多線程的時候,中斷了長達1個多月的時間沒有更新新帖,對大家說聲抱歉,由於本人這個月遇到很多棘手之事情,沒有顧得上。
        好了,言歸正傳了,繼續我們的VB無所不能之旅。         上一篇我們在《VB多線程(1)》中給大家介紹了在VB中使用多線程的兩個函數,一個是“ CreateThread ”另一個是“ Sleep”,這兩個是使用多線程時用到的 Windowskernel32提供的API函數。        那麼,本篇將具體用一個執行個體說明一下這兩個函數是如何使用的。         我們上文提到,“VB的大部分控制項都不是安全執行緒的”,因此,沒有使用我們很熟悉的Text控制項,我們為了完成本程式需要用到GDI函數繪圖來實現多線程實現部分。        我們會用到如下GDI函數,其聲明及說明如下:  擷取表單控制代碼的DC:

Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

設定繪製地區的背景色,也起清除作用:Public Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long

輸出文本:
Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long

釋放資源:
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long 好,那麼,我們開始建立程式: 步驟一:建立一個Module添加如下代碼: Declare Function GetDC Lib "user32" () Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function SetBkColor Lib "gdi32" () Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Declare Function TextOut Lib "gdi32" Alias "TextOutA" () Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Declare Function ReleaseDC Lib "user32" () Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Declare Function CreateThread Lib "kernel32" () Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long

Declare Sub Sleep Lib "kernel32" () Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'全域的form的控制代碼!
Public formhandle As Long

OutText1() OutText1()    '過程一
        Dim i As Long
        Dim dc As Long
        Dim s As String
                dc = GetDC(formhandle) '擷取表單控制代碼的DC
                For i = 1 To 100000
                        s = CStr(i)
                        Call SetBkColor(dc, &HF0F0F0)    '設定繪製地區的背景色,也起清除作用
                        Call TextOut(dc, 10, 10, s, Len(s)) '輸出文本!
                        Call Sleep(40) '等待
                Next
                Call ReleaseDC(formhandle, dc)    '釋放資源!

End Sub

OutText2() OutText2()    '和過程一類似
        Dim i As Long
        Dim dc As Long
        Dim s As String
                dc = GetDC(formhandle)
                For i = 1 To 100000
                        s = CStr(i)
                        Call SetBkColor(dc, &HF0F0F0)
                        Call TextOut(dc, 10, 80, s, Len(s))    '文本位置改變了
                        Call Sleep(20) '延時改變了
                Next
                Call ReleaseDC(formhandle, dc)
End Sub 步驟二:建立一個表單,添加如下組件,:  步驟三:在表單中添加如下代碼: Sub Command1_Click() Sub Command1_Click()
        
        '聲明了線程ID
        Dim threadid1 As Long
        Dim threadid2 As Long

        Call CreateThread(Null, ByVal O&, AddressOf Module1.OutText1, VarPtr(0), ByVal 0&, threadid1)
        Call CreateThread(Null, ByVal 0&, AddressOf Module1.OutText2, VarPtr(0), ByVal 0&, threadid2)
        
End Sub

Sub Form_Load() Sub Form_Load()
        '儲存表單控制代碼全域變數,用於在form 上繪圖 
        formhandle = Form1.hwnd
End Sub 好,我們再來看運行效果,:  好了,本文實現了一個初步的多線程調用的例子,剩下的事情就請大家八仙過海各顯神通了!!  

鐘聲寫的關於Java方面的書: 

《Java程式員,上班那點事兒》:
前言目錄
卓越網銷售連結 
China-pub銷售連結
噹噹網銷售連結

《Java程式員,上班那點事》紀念帖

關於下載《Java程式員,上班那點事兒》的電子版

 

 --------------------------------------------

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.