忍者ブログ
  • 2018.11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 2019.01
重複して始まらないBeginAcceptTcpClient
EndAcceptTcpClientごとにスレッドが作成されるのかと思ったら、1スレッドしか作成できないらしい。何のための非同期なんだろう。。。1つ目のTcpClient作成後に、別の要求があっても2つ目のスレッドは作成されないで1つ目のTcpClientが終了するまでコールバックが呼ばれない。。。うむむ。
Public Sub run()

  Dim socks As clsSocket() = New clsSocket(1) {}
  Dim waits As Threading.WaitHandle() = New Threading.WaitHandle(socks.Length - 1) {}
  Debug.Print(Threading.Thread.CurrentThread.ManagedThreadId)
  mServer.Start(socks.Length - 1)
  Do
    For i As Integer = 0 To socks.Length - 1
      Dim wrkIdx As Integer = i
      If waits(wrkIdx) Is Nothing Then

        socks(wrkIdx) = New clsSocket(mIGetMessage)
        waits(wrkIdx) = mServer.BeginAcceptTcpClient(Sub(aISyncResult As IAsyncResult)

                                 Debug.Print(Threading.Thread.CurrentThread.ManagedThreadId)
                                 socks(wrkIdx).Begin(mServer.EndAcceptTcpClient(aISyncResult).GetStream())

                               End Sub, Nothing).AsyncWaitHandle

      End If
    Next

    waits(Threading.EventWaitHandle.WaitAny(waits)) = Nothing
  Loop

End Sub

PR
【2018/03/18 13:48 】 | javascript | 有り難いご意見(2)
                                    
<<重複して始まらないBeginAcceptTcpClient その2 | ホーム | CentOS7 + ibus>>
有り難いご意見
無題

このサンプルでは?

https://msdn.microsoft.com/ja-jp/library/system.net.sockets.tcplistener.endaccepttcpclient(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2
【2018/03/20 20:00】| URL | ゼンガイチ #9b12d9711b [ 編集 ]


無題
最初と2つ目のスレッドIDだけが固有で、以降2つ目のスレッドIDが使われるため共有ロックになってしまいますね。。。
【2018/03/21 06:34】| | nwpfh #2aa3e25d1b [ 編集 ]


貴重なご意見の投稿














<<前ページ | ホーム | 次ページ>>