Content Supported by Sourcelens Consulting

Attribute VB_Name = "modMT"
Option Explicit

' This module demonstrates that Visual Basic
'   creates a separate instance of global data
'   for each thread.  Thus, the glngGlobalData
'   variable will have a separate value for
'   each thread Visual Basic starts.
'
' This fact is used to keep a count of Coffee
'   objects on each thread:  In the Coffee
'   object's Initialize event, it adds one to
'   glngGlobalData; in its Terminate event,
'   it subtracts one.
'
' Any Coffee object can then find out how
'   many Coffee objects are on its thread by
'   testing glngGlobalData.  Clients can also
'   find out by calling the NumberOnThread
'   method, which returns glngGlobalData.
'
' When MTCoffee is run in the development
'   environment, where there's only a single
'   thread, NumberOnThread is the total number
'   of Coffee objects.  When MTCoffee is
'   compiled with Thread Per Object selected,
'   the count will be one (1) for each Coffee
'   object, unless you call GetCoffeeOnSameThread
'   to create a second Coffee on the thread.
'
' When MTCoffee is compiled with thread pooling,
'   NumberOnThread will be greater than one
'   on some thread whenever the number of
'   active Coffee objects is greater than
'   the number of threads in the pool.
'
' This subject is covered in "Scalability and
'   Multithreading," in Books Online.

Public glngGlobalData As Long