128
« en: Agosto 21, 2012, 10:26:09 am »
Leandro mira arme este codigo que te permite compartir valores a nivel de thread, arme un sistemita con un flag y un valor para poder almacenar mas de un parametro, es bastante simple de entender y modificar a gusto.
Option Explicit
Private Const TLS_MINIMUM_AVAILABLE As Long = 64
Private Declare Function TlsGetValue Lib "kernel32.dll" (ByVal dwTlsIndex As Long) As Long
Private Declare Function TlsSetValue Lib "kernel32.dll" (ByVal dwTlsIndex As Long, ByVal lpTlsValue As Long) As Long
Private Declare Function TlsFree Lib "kernel32.dll" (ByVal dwTlsIndex As Long) As Long
Private Declare Function TlsAlloc Lib "kernel32.dll" () As Long
Private Sub Form_Load()
WriteValue &HCAFECAFE, 1234
Debug.Print ReadValue(&HCAFECAFE) '&HCAFECAFE es el identificador que le asignamos a la variable
End Sub
Private Sub WriteValue(ByVal lProp As Long, ByVal lValue As Long)
Dim lIndex As Long
lIndex = GetIndex(lProp)
If Not lIndex = -1 Then
Call TlsSetValue(lIndex, lValue)
End If
End Sub
Private Function ReadValue(ByVal lProp As Long) As Long
Dim lIndex As Long
lIndex = GetIndex(lProp)
If Not lIndex = -1 Then
ReadValue = TlsGetValue(lIndex)
End If
End Function
Private Function GetIndex(ByVal lProp As Long) As Long
Dim i As Long
Dim lIndex As Long
'// Try to find our property.
lIndex = -1
For i = 0 To TLS_MINIMUM_AVAILABLE - 1
If TlsGetValue(i) = lProp Then
lIndex = i + 1
Exit For
End If
Next
Dim lFlagIndex As Long
'// No property found, allocate index.
If lIndex = -1 Then
Do
lFlagIndex = TlsAlloc '// Find two consecutive slots
lIndex = TlsAlloc
If lIndex >= TLS_MINIMUM_AVAILABLE Then Exit Function
Loop While Not lFlagIndex + 1 = lIndex
Call TlsSetValue(lFlagIndex, lProp)
End If
End Function