Ver Mensaje Individual
  #11  
Antiguo 30-07-2007
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Reputación: 21
fer21unmsm Va por buen camino
Cita:
Empezado por jake
Bueno, nunca he usado lo que me sugieresalguna idea??, efectivamente pueden entrar al mismo tiempo 2 o más archivos .zip .
Saludos
Lo que te sugiero es que a los procesos criticos, donde accedes a la base de datos para insertar, etc u otros recursos criticos le pongas TCriticalSection

Por ejemplo: el SCritical: TCriticalSection lo declare en una librería general

Código Delphi [-]
function evt_set_cfgfcont(idconx:longint; paramointer):integer;cdecl;
var
  ptr: ^SMSG_CFGFILCONT;
  arch: THandle;
  tam: ^integer;
begin
{establece los valores para Filtro de Contenido}
  detenerhilo(MSG_GET_CFG_FCONT_GRAL);
  SCritical.Acquire;
try
  frmprincipal.lblParamEstado.Font.Color := RGB(0,0,128);
  frmprincipal.lblParamEstado.Text := 'Obteniendo Filtro de Contenido...';
 try
  ptr := @param;
  tam:=@ptr^[1];
  with frmconfigurar do
  begin
    if ptr^[0]=1 then ckgfiltro.Checked:=true
    else ckgfiltro.Checked:=false;
    arch:=filecreate(applicationpath+'\filtro.conf');
    FileWrite(arch,ptr^[5],tam^);
    FileClose(arch);
  end;
  Screen.Cursor:=crdefault;
  TThreadLista.create(6);
 except
   frmprincipal.lblParamEstado.Font.Color := RGB(255,0,0);
   frmprincipal.lblParamEstado.text:='Error al recibir datos del sevidor';
   SCritical.Release;
 end;
finally
  evt_set_cfgfcont := 0;
  SCritical.Release;
end;
end;

En este ejemplo evito que dos clientes o dos procesos intenten acceder al archivo "filtro.conf", porque si existen dos o más procesos que deseen acceder los pone en espera, como en una cola

Y al final lo libero para que pueda entrar otro proceso, de lo contrario si no se libera se cuelga

espero te sirva de algo

Saludos cordiales.
__________________
"La información tiene más valor cuando se comparte"
Responder Con Cita