Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Dudas con Threads en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=71463)

Anonim0 20-12-2010 19:53:51

Dudas con Threads en Delphi
 
Saludos a todos. Tengo un par de dudas con respecto al uso de Threads/Hilos en Delphi:

Primero: Con CreateThread como le puedo pasar un parámetro de tipo String a una función? Había intentado algo así pero nada:

Código Delphi [-]
procedure MiFuncion(Param: String);
begin
  ShowMessage(Param);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  ID : Cardinal;
  s  : String;
begin
  s := 'hola';
  CreateThread(nil, 0, @MiFuncion, @s, 0, ID);
end;

------------------

Segundo: En Delphi que es mas recomendable utilizar BeginThread de SysUtils o directamente CreateThread?

rgstuamigo 20-12-2010 21:20:17

Primero que nada creo que deberías averiguar los parámetros de la funcion CreateThread en la propia página de Microsoft.;),
Segundo.- Para Trabajar con Hilos, Delphi ya posee una Clase preparada(Clase TThread) para tal, tú tan solo debes crearte una clase descendiente de ésta y sobreescribir el método Execute para ejecutar algun proceso o una tarea deseada, inclusive Delphi posee un Asistente(Wizard) que te fascilita el trabajo de crecion de Hilos;).

Por otra parte sería mas conveniente que explicaras exactamente lo que deseas hacer y el por qué estas queriendo utilizar directamente las API de windows para crear hilo siendo que, ya delphi hace el trabajo por tí ? :confused:

Saludos...:)

escafandra 21-12-2010 00:36:49

Independientemente de los motivos por los que has decidido usar la API directamente, el principal problema está en la declaración de la función que quieres ejecutar en el hilo. No puede ser un procedimiento sino una función y debe ser stdcall:

Código Delphi [-]
function MiFuncion(Param: PCHAR): DWORD; stdcall;
begin
  MessageBox(0, 0, Param, 0);
  Result := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  ID : Cardinal;
  s  : String;
begin
  s := 'hola';
  CreateThread(nil, 0, @MiFuncion, PCHAR(s), 0, ID);
end;


Saludos.

TaaDow 14-01-2011 23:43:41

Tengo un procedimiento al cual le envío dos parámetros, con estos se procesa con un ciclo, estos toman bastante tiempo para culminarse, por lo tanto me bloquea la pantalla, según he leído la solución podría ser hacer un hilo que ejecute esa función, pero la duda es ¿como enviarle a la función del hilo los parametros?, agradezco sus respuestas.
Código:

type
  Tinserts = class(TThread)
  private
    i: Integer;
    { Private declarations }
  protected
    procedure Actualiza_pgb;
    procedure Execute; override;
  end;
/**********************************/
la funcion del hilo

procedure Tinserts.Execute;
var
  li:Integer;
  cad:String;
begin
  while not do
      begin
      end;
/***********************************/

la idea es Tinserts.Execute, reciba dos parametros.

escafandra 15-01-2011 10:23:32

Quizás la forma mas sencilla y clara sea definir esos parámetros como propiedades de la clase TThread que has creado. Al instanciarla, creas un Thread en modo suspendido (Suspended), colocas los valores apropiados y luego permites la ejecución (Resume).


Saludos.


La franja horaria es GMT +2. Ahora son las 12:56:51.

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