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

來源:互聯網
上載者:User
VB無所不能之七:VB的多線程(1) 作者:鐘聲  題外話: 最近,寫了幾篇《VB無所不能》系列,本系列文章的創作初衷就是要去顛覆眾多程式員對於“非物件導向”語言“VB”的成見! 當然,我也早有預期,此言一出必然招致不明真相的群眾的“圍攻”,然而,我還是要繼續寫下去,事實勝於雄辯,在這裡我也想和廣大網友說一聲,如果要質疑我文章中的某些觀點,歡迎拿出真憑實據與我辯論,切莫採取 “五毛黨”式的語言 橫加棒殺。  再次聲明關於“無所不能”: 本文系列為《VB無所不能》,並不是真的像孫悟空72變似的“無所不能”,想變一個蚊子變個蚊子,想變個大象變個大象,吃喝拉撒睡全用VB給你解決了那是不可能的,關於“VB是否無所不能”這個話題就不用再跟我爭論了,任何語言都不能“無所不能”,這裡的“無所不能”是一個“狀語”,而不是“定語”,OK? 好,我們繼續,最近有網友強烈要求我寫一篇關於VB多線程的文章,我在部落格的留言中大呼“頭疼”!! 是啊,VB確實處理多線程是一個頭疼的事情,比VB處理影像處理,鉤子程式,和指標要頭疼很多。頭疼之處無非有如下幾點: 1、VB本身沒有多線程的處理機制2、VB的大部分控制項都不是安全執行緒的3、動不動就莫名其妙的因為嚴重錯誤而程式崩潰 但,還是為了滿足網友要求,我還是硬著頭皮寫一篇,如有不對之處,還請大家見笑了!!  一、首先我們來認識一下Windows的kernel32給我們提供的線程函數  CreateThread   說明:微軟在Windows API中提供了建立新的線程的函數CreateThread  概述:
  當使用CreateProcess調用時,系統將建立一個進程和一個主線程。CreateThread將在主線程的基礎上建立一個新線程,大致做如下步驟:
  1.在核心對象中分配一個線程標識/控制代碼,可供管理,由CreateThread返回
  2.把線程退出碼置為STILL_ACTIVE,把線程掛起計數置1
  3.分配context結構
  4.分配兩頁的實體儲存體以準備棧,保護頁設定為PAGE_READWRITE,第2頁設為PAGE_GUARD
  5.lpStartAddr和lpvThread值被放在棧頂,使它們成為傳送給StartOfThread的參數
  6.把context結構的棧指標指向棧頂(第5步)指令指標指向startOfThread函數  VB函式宣告: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  參數說明:
lpThreadAttributes:
指向SECURITY_ATTRIBUTES型態的結構的指標。在Windows 98中忽略該參數。在Windows NT中,它被設為NULL,表示使用預設值。
dwStackSize:線程堆棧大小,一般=0,在任何情況下,Windows根據需要動態延長堆棧的大小。
lpStartAddress:指向線程函數的指標,形式:@函數名,函數名稱沒有限制,但是必須以下列形式聲明:DWORD WINAPI ThreadProc (LPVOID pParam) ,格式不正確將無法調用成功。
lpParameter:向線程函數傳遞的參數,是一個指向結構的指標,不需傳遞參數時,為NULL。
dwCreationFlags:線程標誌,可取值如下
  CREATE_SUSPENDED: 建立一個掛起的線程
  0 :建立後立即啟用。
lpThreadId:儲存新線程的id。  傳回值:
  函數成功,返回線程控制代碼;函數失敗返回false。
  函數說明:
  建立一個線程。  Sleep   VB聲明:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

調用:
Sleep 3000 '延時3秒執行'這個是sleep,作用就是讓兩個線程繪圖頻率不一致,效果才明顯。
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 好,今天我們認識了這兩個函數,今天先寫到這,明天我們給出常式,看看VB是如何利用這些函數完成多線程任務的吧。。 

'''  鐘聲寫的關於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.