国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

怎樣用VB寫多線程

2019-11-18 17:52:10
字體:
來源:轉載
供稿:網友
盡管vb5是apPRentsingle-thread(單線程)的.但用addressof加上一些API,就可以非常容易的做多線程.(比VC容易的多,做出來的東西也一樣快,因為都是用API).每一個縣城(線程,下同)約占用20毫秒的時間片.

vb5有一個主線程.我們可以另外加一個工作線程.對于不清楚什么是單/多線程的程序元,我們用一個簡單的列子來說明一下.
再form里加上兩個timer控件.吧interval屬性設成5000(5秒),然后在兩個timer1_timer事件中放一個大loop,如for10000next.運行.你會看到第二個timer控件不會在五秒后執行,除非timer1的for-next結束.同樣,如果你的程序中有大量的數據庫讀寫.你的用戶街面可能被"凍".這時,我們就需要用多縣城來改進程序了.(當然你可以用DoEvents來避免被凍,但用DoEvents有橫多副作用.這里不提).

我們用的第一個API是CreateThread,VB的格式是:

privatedeclarefunctionCreateThreadLib"kernel32"(byvalpThreadAttributesasany,byvaldwStackSizeaslong,byvallpStartAddressaslong,lpParameterasany,byvaldwCreationFlagsaslong,lpThreadIDaslong)aslong.(從vbAPItextviewer中拿是最真確的語法)

CreateThread的參數指出你將要創立的縣城是什么樣子的.CreateThread的返回值是一個縣城的handle.這里是vb的多縣城初始化程序:

PublicSubInitialize(lpfnBasFuncaslong)
dimdwStackSizeaslong
dimdwCreationFlagsaslong
dimlpThreadIdaslong
dimlpParameteraslong
dimmyNullaslong
myNull=0&'createanullpointer
dwStackSize=0'0表示用exestacksize
dwCreationFlags=4'用4表示初始化后先不激活,讓別人來激活.
Me.Thread=CreateThread(myNull,dwStackSize,lpfnBasFunc,myNull,dwCreationFlags,lpThreadId)
ifMe.Thread=myNullthen
Msgbox"createthreadfailed"
endif
endSub
下面是兩個API用來激活/暫定該線程.

privatedeclarefunctionResumeThreadlib"kernel32"(byvalhThreadaslong)aslongprivatedeclarefunctionSuspendThreadlib"kernel32"(byvalhThreadaslong)aslong

讓我們來用一個變量表示當前縣城的狀態.
publicThreadStatusasboolean
在vb里,可用property來實現ThreadStatus的管理.


PublicpropertyLetEnabled(byvalvNewValueasboolean)
ifvNewValue=trueandMe.ThreadStatus=falsethen
ResumeThreadMe.Thread
Me.ThreadStatus=True
elseifMe.ThreadStatus=truethen
SuspendThreadMe.Thread
Me.ThreadStatus=False
endif
endProperty

這個簡單的類可以用NewObject來引用:
'makenewthreadobject
dimmyThreadasNewclsThreads
'創建縣城Foo
myThread.InitializeAddressOfFoo
'激活縣城
myThread.Enabled=True

執行后,你可以用PVIEW95.EXE看到你的線程.
你還可以提高你的線程的優先級.
SetThreadPriority'設優先級GetThreadPriority'查優先級

你把以上的程序加入timer例子,就會看到兩個timer同時運行.
這里要提醒一下.vb5的開發環境是單縣城的.如果你的程序寫錯,或中斷后試圖恢復,往往會出錯,有時是GPF錯.總之,用vb寫多線程可以寫出和VC一樣快的程序.而且開發容易的多,開發速度也快得多.

拋磚引玉.希望能看到獸經,虎經,鱉經.....->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 娱乐| 江北区| 屏东市| 丹巴县| 镇江市| 沧州市| 广平县| 陈巴尔虎旗| 太谷县| 宽甸| 温州市| 烟台市| 镇巴县| 阿拉善左旗| 尚义县| 神木县| 蚌埠市| 合江县| 芜湖市| 怀化市| 孟村| 若羌县| 合作市| 福安市| 阿坝县| 平乐县| 广饶县| 崇礼县| 宁远县| 齐齐哈尔市| 东源县| 义马市| 宜兴市| 佛山市| 德保县| 亚东县| 怀安县| 厦门市| 忻州市| 仁寿县| 长葛市|