⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmmorethreads.vb

📁 清华大学出版社出版的 移动应用开发宝典 张大威(2008)的附书源代码
💻 VB
字号:
Imports Microsoft.VisualBasic
Imports System
Imports System.Windows.Forms
Imports System.Threading
Imports System.Diagnostics
Imports System.Collections.Generic

Namespace CodeForChapter11cs
  Public Partial Class frmMoreThreads
	  Inherits Form
	Public Sub New()
	  InitializeComponent()
	End Sub

	Private someCounter As Long = 0

	Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click
	  someCounter = 0
      Dim t1 As Thread = New Thread(AddressOf Me.ThreadBoth) ' Me.ThreadFirst1)
	  t1.Name = "Worker Thread 1 "
      Dim t2 As Thread = New Thread(AddressOf Me.ThreadBoth) ' Me.ThreadSecond2)
	  t2.Name = "Worker Thread 2 "

	  t1.Start()
	  t2.Start()

	  t1.Join()
	  t2.Join()

	  MessageBox.Show("Final result = " & someCounter.ToString())
	End Sub

	#Region "race condition 1"
	Private Sub ThreadFirst1()
	  For j As Long = 0 To 99999999
		Debug.WriteLine(Thread.CurrentThread.Name & "before inc")
		someCounter += 1
	  Next j
	  MessageBox.Show(Thread.CurrentThread.Name, "Done")
	End Sub

	Private Sub ThreadSecond2()
	  For j As Long = 0 To 99999999
		Debug.WriteLine(Thread.CurrentThread.Name & "before inc")
		someCounter -= 1
	  Next j
	  MessageBox.Show(Thread.CurrentThread.Name, "Done")
	End Sub
	#End Region

	Private Sub ThreadBoth()
	  Debug.WriteLine(Thread.CurrentThread.Name & "enters method")
	  Dim localVar As Integer = 0
	  localVar += 1

      'SyncLock (someLock) ' uncomment the lock region to achieve the undesired effects
      If someCounter = 0 Then
        Debug.WriteLine(Thread.CurrentThread.Name & "in if block")
        Thread.Sleep(1) 'simulate some longer activity
        someCounter += localVar
        Debug.WriteLine(Thread.CurrentThread.Name & "just incremented")
      Else
        Debug.WriteLine(Thread.CurrentThread.Name & "in else block")
        someCounter += 3
      End If
      'End SyncLock
      Return
    End Sub

	#Region "Not used in sample. Shows Monitor code"
	Private someLock As Object = New Object()
	Private Sub SomeMethod()
	  ' some code

	  Monitor.Enter(Me)
	  Try
		' critical region, only 1 thread at a time enters this

	  Finally
		Monitor.Exit(Me)
	  End Try

	  ' other code
	End Sub

	#End Region
  End Class
End Namespace

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -