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; param
ointer):integer;cdecl;
var
ptr: ^SMSG_CFGFILCONT;
arch: THandle;
tam: ^integer;
begin
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.
