Ver Mensaje Individual
  #1  
Antiguo 10-07-2008
ginasil ginasil is offline
Miembro
 
Registrado: jun 2004
Posts: 20
Reputación: 0
ginasil Va por buen camino
Error AccesViolation en Threads

Hola a todos,
Por favor me podrian colaborar con u problema con Threads que generan error Accesviolation, segun lo que lei un thread "All threads of a process share the same address space" y no he podido hacer que cada uno tenga una dirección diferente.
tengo 10 progressBar y 10 checklistbox donde la idea es que por cada checklist un Thread me indique en el progressbar que el checklist esta actualizado:

type
Thilo_muestraestado = class(TThread)
private
Caja: TCheckListBox;
Num,mensaje,cod,accion,tipo : String;
protected
procedure Execute; override;
procedure MostrarProgreso;
procedure MostrarProgreso2;
public
constructor Create(Caja: TCheckListBox;Num : string);
end;

/**en public
hilo1,hilo2,..... hasta hilo10 : Thilo_muestraestado;

procedure Thilo_muestraestado.Execute;
var
k,i : integer;
begin
try
while not Terminated do
begin
//*** Ejecuta una consulta y si la hace
Synchronize( MostrarProgreso );
y si no la hace...
Synchronize( MostrarProgreso2 );
end;
finally
end;
end;

//** cuando inicia el form asigno los diez hilos...
if not Assigned(hilo0) then hilo0 := Thilo_muestraestado.Create(StringGrid2,'0');
if not Assigned(hilo1) then hilo1 := Thilo_muestraestado.Create(StringGrid3,'1');
... y asi...

procedure Thilo_muestraestado.MostrarProgreso;
begin
if Terminated then exit;
... agrega y borra lineas del stringrid... que lo llamo

if cajon = '0' then aumenta(Form1.ProgressBar0);
if cajon = '1' then aumenta(Form1.ProgressBar1);
y asi los diez...
end;

procedure Thilo_muestraestado.MostrarProgreso2;
begin
/**solo para que muestre progreso....
if cajon = '0' then aumenta(Form1.ProgressBar0);
if cajon = '1' then aumenta(Form1.ProgressBar1);
y asi los diez...
end;

Gracias
Responder Con Cita