Mostrando entradas con la etiqueta Threads. Mostrar todas las entradas
Mostrando entradas con la etiqueta Threads. Mostrar todas las entradas

Computación distribuida en Delphi





Para los interesados en computación distribuida aquí tienen un interesante artículo que muestra cómo utilizar la librería open-source hxGrid paso a paso.

En resumen lo que hace es:


Inicialmente cada uno de los equipos "Agente" envía paquetes de broadcast para localizar al equipo "Coordinador" y cuando lo encuentra le envía su status periódicamente (porcentaje de CPU libre, RAM libre, número de tareas en cola)


Para comenzar a usar el grid la aplicación inicializa la librería hxGrid, después conecta con un coordinador solicitando la lista de los agentes para conectarse a ellos. Desde ese momento el equipo está preparado para ejecutar tareas remotas, además solicita continuamente la lista de nuevos agentes que podrían unirse a la sesión activa.


La aplicación grid añade tareas a la cola de ejecución, dichas tareas son enviadas continuamente a los agentes en background. Si la conexión con algún agente se ha perdido, la equipo es capaz de reasignar tareas a otro agente.



Página web:

http://www.codeproject.com/KB/threads/hxgrid.aspx



ClubDelphi

http://www.clubdelphi.com/foros/showthread.php?t=69899










Utilizar hilos sin la clase vcl thread

Para utilizar hilos sin la clase Thread tenemos que hacer 2 cosas:

1) Crear el thread

La llamada para crear el hilo sería así:
procedure TForm1.Button1Click(Sender: TObject);
var
thr : THandle;
thrID : DWORD;
begin
thr := CreateThread(nil, 0, @HacerAlgo, nil, 0, thrID);
if (thr = 0) then ShowMessage('Error al crear el hilo);
end;

2) Proporcionar una función al hilo.

Requerimientos de la función:
- Se le puede dar el nombre que se quiera
- Debe tener un parámetro de tipo puntero
- La función devolverá un parámetro del tipo longint
- En la declaración se debe añadir la directiva stdcall, lo que le dice al compilador que la función le pasará los parámetros según la convención de Windows.

Ej.
FUNCTION HacerAlgo(Ptr : Pointer) : LongInt; STDCALL;
BEGIN
SetThreadPriority(DWORD(-2), THREAD_PRIORITY_IDLE); //Establece la prioridad del hilo
//Opcional. Evita el acceso simultáneo a las variables contenidas entre InterlockedIncrement e
// InterlockedDecrement
InterlockedIncrement(iValor);
--
--
--
InterlockedDecrement(iValor);
END;

Nunca ha sido tan fácil utilizar los threads

.
La suite VCL "abfcomponents" incorpora un componente llamado TabfThreadComponent que encapsula el objeto tThread que simplifica enormemente la programación con hilos.

Para utilizarlo instalar la suite como se hace habitualmente y arrastrar el componente anterior a vuestro form.

Incorpora 4 eventos: OnException, OnExecute, OnTerminate, OnFinish, pues bien para ejecutar un prodimiento cualquiera en un thread simplemente hay que colocarlo en el evento OnExecute, así de fácil y nos olvidamos de definir el thread y demás historias, ya que eso lo hace el componente por nosotros.

Definición del evento OnExecute:

procedure TForm1.abfThreadComponent1Execute(Sender: TObject);
begin
// incluir aquí la llamada al procedimiento que hayamos definido en nuestra unit
end;
Y para lanzar el hilo teclear:
abfThreadComponent1.Execute;

Dado que no he encontrado mucho código en internet, si mis estimados lectores pueden postear código o indicar alguna web que lo contenga sería de agradecer y muy útil para todos.


Link:



Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...