Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-12-2010
Anonim0 Anonim0 is offline
Registrado
 
Registrado: abr 2010
Posts: 3
Poder: 0
Anonim0 Va por buen camino
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?
Responder Con Cita
  #2  
Antiguo 20-12-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

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í ?

Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 21-12-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #4  
Antiguo 14-01-2011
TaaDow TaaDow is offline
Registrado
 
Registrado: sep 2010
Posts: 8
Poder: 0
TaaDow Va por buen camino
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.

Última edición por TaaDow fecha: 14-01-2011 a las 23:48:54.
Responder Con Cita
  #5  
Antiguo 15-01-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
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
Threads en delphi gesjug Varios 7 30-09-2008 13:25:57
Dudas delphi for php Coco_jac PHP 2 21-09-2007 18:02:44
Error: Delphi 2006 + Debugger + Threads xEsk Varios 0 16-02-2007 16:03:19
Dudas con Delphi Christian128 Varios 2 20-05-2006 23:12:35
Manejo de threads en Delphi dmasson Varios 3 16-04-2004 15:22:58


La franja horaria es GMT +2. Ahora son las 15:46:24.


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