Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Oye jhonny, ¿podrías explicar un poco eso del TParallel? Bueno, es que ni la sintaxis entiendo ¿qué hace un & ahí?

LineComment Saludos
Hombre, claro, espero ser de ayuda, ahí va:

TParallel es una clase que tiene varios métodos cuyo objetivo es ejecutar tareas (como su nombre lo indica) en paralelo, TParallel te hace más fácil el uso de los TTask (Que es como la nueva clase para manejo de hilos, si no que usa el TMonitor para la administración de la ejecución de hilos), es especial para aquellos casos de uso cotidiano, como lo es en este caso un mero for de toda la vida.

TParallel tiene otro métodos a parte del for, el cual es Join... que también sirve para ejecutar varias tareas al tiempo... pero vamos a la explicación de la sintaxis y del asunto del &.

1) El &, este es un comodín que agregaron en Delphi (No recuerdo desde cual versión realmente), el cual sirve para que puedas ponerle como nombre a tus métodos aquellas palabras que siempre han sido reservadas... para el caso que vemos, la palabra For... entonces, podrías por ejemplo ponerle a un método de una clase tuya, el nombre While, anteponiendo simplemente &While... incluso podrías llamar tu método While usando TTuClase.While, sin el &... sin embargo soy de los que prefiere ponerle el & para evitar posibles "situaciones".

2) La sintaxis de TParallel:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  vCS: TCriticalSection;
  vStringList: TStringList;
begin
  vStringList := TStringList.Create;
  try
    vCS := TCriticalSection.Create;

    TParallel.&For(0, 499,
      procedure(pI: Integer)
      begin
        vCS.Acquire;
        vStringList.Add((2 * pI + 1).ToString);
        vCS.Release;
      end);

    Memo1.Text := 'Numeros impares';
    Memo1.Lines.AddStrings(vStringList);
  finally
    vCS.DisposeOf;
    vStringList.DisposeOf;
  end;
end;

  • TParallel tiene "dos" métodos de clase principales (un método de clase nos permite hacer llamado al método sin necesidad de instanciar la clase, por eso está declarado como class function &For( ) dentro de la clase) y puedo llamarlo directamente con TParallel.&For.
  • TParallel tiene 2 métodos de clase los cuales son For y Join... ambos tienen bastantes sobre cargas, en el For una de sus sobrecargas es aquella que usé para este caso, en ella pasas el primer valor del recorrido, el último y un método anónimo... en el caso del método anónimo (Que es el que está entre el procedure...begin...end)... éste devuelve el número que está "recorriendo" (lo pongo entre comillas porque este "recorrido" es en paralelo), este número lo capturas en una variable (en el caso del ejemplo me inventé el nombre pI que es el que contendrá el valor de dicho número... esta variable puede tener el nombre que quieras mientras respetes la convención del nombre de una variable) y este método anónimo es el que ejecutará todo aquello que quieres que se ejecute en paralelo.
  • El TCriticalSection es en sí la "señal de semaforización" para que se ejecute lo que está entre el Acquire y el Release, cuando el proceso anterior haya terminado... es el TCriticalSection que siempre se ha usado con TThread.

Es muy curioso que preguntes por esto, porque tengo hace rato en el tintero un artículo donde quiero explicar este tema, aunque nunca encuentro es ¿Por dónde comenzar?, puesto que hay que explicar primero el uso de métodos anónimos, los class methods o bueno... tal vez al revés... me ayudaría mucho tu retroalimentación acerca de si se entendió más o menos lo que trato de explicar y lo que ha quedado en el completo aire para complementar y explicarlo mejor.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 24-04-2017 a las 19:50:11.
Responder Con Cita
  #2  
Antiguo 24-04-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Muchas gracias jhonny. Sí que queda claro, aunque

Cita:
Empezado por jhonny
nunca encuentro es ¿Por dónde comenzar?
para palurdos como yo comenzaría por una breve explicación de qué es eso de ejecutar tareas en paralelo y cuáles son las diferencias con el uso de threads.

Lo de las funciones anónimas y los métodos de clase lo dejaría sólo como referencia a otros artículos tuyos o de terceros.

LineComment Saludos
Responder Con Cita
  #3  
Antiguo 24-04-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Muchas gracias jhonny. Sí que queda claro, aunque



para palurdos como yo comenzaría por una breve explicación de qué es eso de ejecutar tareas en paralelo y cuáles son las diferencias con el uso de threads.

Lo de las funciones anónimas y los métodos de clase lo dejaría sólo como referencia a otros artículos tuyos o de terceros.

LineComment Saludos
Bueno Roman, si tú eres un palurdo, no sé qué soy yo entonces jejeje

Me alegra que se haya entendido y gracias por la retroalimentación, es un norte que necesitaba.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar números impares de un listbox a otro ale4132 Varios 5 17-12-2012 19:33:10
Consulta Desde->Hasta Luis M. Firebird e Interbase 6 30-07-2008 19:40:34
1000 Mil M 0011 1110 1000 3e8 sakuragi La Taberna 29 05-03-2008 18:28:56
Poner puntos a los números mayores de 999 y hasta 1M Pedro-Juan Trucos 2 26-12-2007 19:13:08
Factorial hasta 1000 Cheswar Varios 29 21-09-2007 20:43:27


La franja horaria es GMT +2. Ahora son las 15:42:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi