頂層宣告:
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
Dim Out3 As Long
簡單呼叫:
Sub Test1()
Dim lp As Long, llp As Long, x As Long
lp = 1000
x = CreateThread(Null, ByVal 0&, AddressOf z_pHandle.OutText3, Varptr(lp), ByVal 0&, ThreadID1)
r = WaitForSingleObject(x, -1)
Debug.Print Out3 & "!"
End Sub
Sub OutText3(b As Long)
Out3 = C * 2
End Sub
lp的數值1000傳遞不到b中,為什么?
uj5u.com熱心網友回復:
將lp定義為全域變數再試試uj5u.com熱心網友回復:
第一樓上這sb的話千萬不能信.第二
Sub OutText3(b As Long)
Out3 = C * 2
End Sub
b和out3有關系?
Sub OutText3(b As Long)
Out3 = b * 2
End Sub
uj5u.com熱心網友回復:
另外,再vb下用CreateThread的執行緒很不穩定,因為vb大部分控制元件都不是執行緒安全的而且多執行緒除錯非常麻煩.
一崩潰就馬上完蛋
我再稍微看了下你的代碼
你再 Sub Test1()主執行緒里呼叫 Debug.Print Out3 & "!"
十有八九是得不到正確的輸出的
Debug.Print Out3 & "!"你放到Out3 = b* 2里試下
應該就可以了
uj5u.com熱心網友回復:
Sub OutText3(b As Long)
Out3 = C * 2
Debug.Print Out3 & "!"
End Sub
uj5u.com熱心網友回復:
是這樣的,我說一下我的想法:
在msdn中解釋CreateThread的lpParameter可以傳遞引數。
那么我在Sub Test1程式中,利用CreateThread呼叫Sub OutText3(b As Long),并傳遞引數lp到引數b中,
然后WaitForSingleObject等待OutText3運行完畢后,Out3應該為2*b的值,也就是2*1000.
但實際中,lp引數根本就傳遞不到Sub OutText3(b As Long)的b里面去,b還是0
uj5u.com熱心網友回復:
為什么不使用多行程呢?
uj5u.com熱心網友回復:
呵呵…uj5u.com熱心網友回復:
Declare Function CreateThread Lib "kernel32" _
(lpThreadAttributes As Any, ByVal dwStackSize As Long, _
ByVal lpStartAddress As Long, ByVal lpParameter As Long, _
ByVal dwCreationFlags As Long, byval lpThreadId As Long) As Long
Sub OutText3(byval b As Long)
Out3 = C * 2
Debug.Print Out3 & "!"
End Sub
uj5u.com熱心網友回復:
Declare Function CreateThread Lib "kernel32" _(lpThreadAttributes As Any, ByVal dwStackSize As Long, _
ByVal lpStartAddress As Long, ByVal lpParameter As Long, _
ByVal dwCreationFlags As Long, <strong><span style="color: #FF0000;">byval</span></strong> lpThreadId As Long) As Long
uj5u.com熱心網友回復:
如下:lp的數還是傳不到OutText3的b中,公共變數Out3還是=0
Sub OutText3(byval b As Long)
Out3 = b * 2
'Debug.Print Out3 & "!"
End Sub
uj5u.com熱心網友回復:
我之前看錯了,正確的結果應該是2樓代碼Sub OutText3(byval b As Long)
Out3 = b * 2
Debug.Print Out3 & "!"
End Sub
再把這個的c改成b,如果還有錯,那就見鬼了
uj5u.com熱心網友回復:
《Windows核心編程》轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/67017.html
標籤:API
上一篇:vb如何進行連續10日以上統計
下一篇:怎么做人臉檢測登陸系統。
