htm=articulo/thread.htm ok articulo/thread.htm

Ejecutando threads con VB5.

Se describe en este -mínimo- artículo, la declaracion y el uso del API CreateThread en VB5 con el objeto de experimentar la programacion de threads en VB5.


La primera condición para implementar threads en VB5 es que el propio VB5 soporte la programación de threads. Parece una perogrullada, pero en la documentacion de VB5 no he encontrado ninguna mención a este tema, sin embargo algunos expertos programadores insisten en decir que VB5 soporta threads y las -pocas- pruebas que he hecho parecen confirmar que es así.

El API de Windows-32bits define las funciones, estructuras y constantes que tenemos que usar para crear (sincronizar, destruir, etc... ) threads. Tenemos que incluir las declaraciones necesarias en un módulo .BAS

Para iniciar un thread tenemos que crear una funcion en un módulo .BAS, esta funcion ha de tener un solo argumento (importante: un argumento y solo uno !) y ha de devolver un Long. Para flexibilizar el número de argumentos que puede recibir la funcion usaremos una estructura (definida con Type).

Consideremos el siguiente código de ejemplo:

'································································
Declare Function CreateThread Lib "kernel32" ( _
  ByVal nulo_1 As Long, _
  ByVal nulo_2 As Long, _
  ByVal direccion_funcion As Long, _
  parametros_funcion As Any, _
  ByVal nulo_3 As Long, _
  identificador_devuelto As Long) _
  As Long
'································································
Type Parametros1
  par1 As Long
  par2 As String
  par3 As Integer
  par4 As Integer
End Type
'································································
Function Funcion1(params As Parametros1) As Long
  'Añadir aqui el codigo que se ejecutara en thread aparte
End Function
'································································

La funcion que inicia el thread, Funcion1, recibe como parámetros una estructura, Parametros1, esta estructura puede declararse de diferente manera según sea necesario (esto es solo un ejemplo). La declaracion del API CreateThread se ha manipulado para simplificar su uso en VB5. Se adoptan valores por defecto para tres de los parámetros.

Para lanzar la ejecucion del thread hay que invocar a CreateThread de la siguiente manera:

'································································
Sub EjecutarFuncion1()
   Dim handle As Long
   Dim ident As Long
   Dim pars As Parametros1
   '+++++ inicializar estructura pars
   handle = CreateThread(0, 0, AddressOf Funcion1, pars, 0, ident)
   '+++++ guardar handle si es necesario
End Sub
'································································

He probado el código precedente en VB5 y funciona. No incluyo aquí un ejemplo completo porque la programación usando threads requiere generalmente que se usen las funciones de sincronización, semaforos, mutex, etc...


© info3@maicas.net