多線程、Socket技術(shù)及委托技術(shù)的關(guān)系

字號:

這幾天忙著開發(fā)一個競賽軟件,要求一個前端的顯示,幕后*控前端顯示給競賽者,這就要用到多線程、Socket技術(shù)及委托技術(shù)。于是在網(wǎng)上找了一些關(guān)于Socket技術(shù)的資料,加上學(xué)過的線程的一點(diǎn)知識,開始我的整合編程。深知自己一直都對VB沒怎么興趣的,感覺他不是真正的編程,VB是易學(xué),易懂,易理解,想想還是花點(diǎn)時間學(xué)下,感覺有一天會有用的,于是一時心血來潮,憑著自己埋頭苦干的邊學(xué)東西邊做軟件,還好有其他編程軟件的一點(diǎn)經(jīng)驗(yàn)吧,沒走偏了,一直都很想寫個文章做個紀(jì)念,最令我深刻的、學(xué)到最有用的東西也就是多線程、Socket技術(shù)、委托技術(shù)。現(xiàn)在開始我的VB編程:
    第一步:什么是多線程?如果一個窗體里創(chuàng)建一個線程,他就是一個多線程,是兩個線程的多線程,窗體顯示及控件的管理本身就有一個線程控件,叫UI線程(自己理解應(yīng)該是用戶界面的線程吧!!呵呵),是主線程,而創(chuàng)建的線程則是子線程。那么什么是Socket呢?Socket就是套接字,通過Socket,有可以作為Server端的Socket,也有作為Client端的Socket,服務(wù)端開啟一個子線程來監(jiān)聽客戶端發(fā)來的所有信息,并可以發(fā)送回信息,實(shí)現(xiàn)數(shù)據(jù)雙向通信。聊天軟件很多都是基于Socket的編寫出來的。好了,什么是委托技術(shù)呢?簡單的說是就有一個人,他沒有能力完成想要做的事,出錢委讓給別人去完成,像某某公司經(jīng)理要求你開發(fā)個競賽軟件,他本身沒有能力去完成這樣的事,所以出錢讓你去完成。好了,明白了是什么后,接下來寫下一些代碼吧!!!!!
    第二步:多線程例子
    VB中多線程可以傳值
    Dim th as System.Threading.Thread
    th = New System.Threading.Thread(Addressof 對象名(或類名).方法)
    對象名(或是類名).屬性 = 值 '通過這樣可以實(shí)現(xiàn)線程傳參
    .......
    th.start()
    也可以返回值(通過委托技術(shù)實(shí)現(xiàn)),在做競賽軟件時,遇到一個問題,當(dāng)在子線程里面去New 一個Form或是控件時,都會使窗體出現(xiàn)假死,于是在網(wǎng)上找了一些資料及查MSDN后才知道,原來子線程是沒有能力去*控UI線程的控件,這里只能用委托技術(shù),--------------------------這個是很好的一個說明==========呵呵=========
    Dim th as System.Threading.Thread
    th = New System.Threading.Thread(Addressof 方法名1)
    th.start()
    Delegate Sub DelegateHandler(ByVal 參數(shù) as String) '聲明一個委托
    private Sub 方法名1()
     dim dh as DelegateHandler = New DelegateHandler(AddressOf 方法名2)
     me.invoke(dh, new Object()...{"value"})
    End Sub
    private Sub 方法名2(ByVal str as String)
     '被委托給的方法 ,處理委托后的數(shù)據(jù)
    End Sub
    第三步:Socket技術(shù)例子
    (1)服務(wù)器端
    Socket是基于線程而創(chuàng)建的,在UI線程下創(chuàng)建子線程,線程方法中用一個死循環(huán)在監(jiān)聽客戶端的信息,第收到一信息后,委托給UI線程方法去處理。示例代碼:
    '聲明一個線程
    Dim t As System.Threading.Thread
     t = New Thread(AddressOf WaitData)
     t.Start()