由于msdn165168账号不能登录,故用这个账号再发线程池求教各位,谢谢!!!
由于msdn165168账号不能登录,故用这个账号再发线程池求教各位,谢谢!!!
sp1234、fangxinggood:谢谢!!
我在TYZHDY里设了一全局变量zbjsjs += 1,当zbjsjs =5时,判断线程全部结束
- VB.NET code
‘窗体F1: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim mhs As New List(Of ManualResetEvent) For ifd As Short = 0 To 4 Dim mh As New ManualResetEvent(False) mhs.Add(mh) ‘ ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ISTRNew)) ThreadPool.QueueUserWorkItem(Sub(h) ISTRNew() mh.Set() End Sub) Next WaitHandle.WaitAll(mhs.ToArray)‘这句老实报错,求教是何原因 Pdjijs() end sub Private Function ISTRNew() Dim w1 As Integer, w2 As Integer Dim tmp As String Dim vvn As New XTHTHS ISHn = ISHn + 1 tmp = "{" & ZBGH(ISHn - 1) & "}" & vbCrLf w1 = InStr(istr.ToUpper, tmp) : w2 = InStr(w1, istr.ToUpper, "ABCDEFGHIJKLMNOPQRSTUVWSYZ{}[]") vvn.indexnew = ISHn - 1 vvn.NAM = Mid(istr.ToUpper, w1 + Len(tmp), w2 - w1 - Len(tmp) - 1) vvn.TYZHDY() End Function Public Sub Pdjijs() If hqs.maxhigh < DRAWLINZT(0).Max Then 'DRAWLINZT(0).Max * 1000 xmax = DRAWLINZT(0).Max Else xmax = hqs.maxhigh End If DRAWLINZT(0).Max = xmax If PDTIANSHU = True Then If hqs.minlow > DRAWLINZT(0).min Then xmin = DRAWLINZT(0).min Else xmin = hqs.minlow End If DRAWLINZT(0).min = xmin Else xmin = hqs.minlow DRAWLINZT(0).min = xmin End If Debug.Print(xmax & "dddddddddddddd " & xmin) Drawstar()'绘图函数 End Sub但出现一个问题:
For ifd As Short = 0 To 4
ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf ISTRNew))
Next
Pdjijs()’里面的DRAWLINZT(0).min取不到值,(我判断是线程没有全部完成就执行Pdjijs,故我想在执行Pdjijs前加一判断线程全部结束的语句,可不会)
于是我又想到:在类模块XTHTHS里加入:
If zbjsjs = 5 Then
F1.Pdjijs()’里面的DRAWLINZT(0).min能到值
End If
可又出现一个问题,Drawstar()绘制的图形显示不出来
还请各位高手看看我的问题出在哪,谢谢!!!
[解决办法]
ThreadPool.QueueUserWorkItem
执行的,都是异步的
也就是WaitHandle.WaitAll(mhs.ToArray)这句很有可能,在压入线程池的四个线程执行前就,执行
[解决办法]
Private Function ISTRNew()
Dim w1 As Integer, w2 As Integer
Dim tmp As String
Dim vvn As New XTHTHS
tmp = "{" & ZBGH(ISHn - 1) & "}" & vbCrLf
w1 = InStr(istr.ToUpper, tmp) : w2 = InStr(w1, istr.ToUpper, "ABCDEFGHIJKLMNOPQRSTUVWSYZ{}[]")
vvn.indexnew = ISHn - 1
vvn.NAM = Mid(istr.ToUpper, w1 + Len(tmp), w2 - w1 - Len(tmp) - 1)
vvn.TYZHDY()
ISHn += 1 放到最后,兄弟
End Function
ISHn = 6?
确定 5次 +1 =6,初始值多少