Ciao ragazzi, ho un programma che in funzione della configurazione carica una form piuttosto che un altra. Solo che in entrambi i casi deve lanciare una funzinone in multithreading e in questa funzione lancio questa procedura.
procedure TBaseThread.SetSonoUscitoDalCicloLetturaFile(valore: boolean);
begin
try
try
if Trim(UpperCase(Form1.GetConfigurazione('START_VENDITA')))='TRUE' then
begin
EnterCriticalsection(unit_Principale.Frm_Principale.ACriticalSection);
unit_Principale.Frm_Principale.SonoUscitoDalCicloLetturaFile:=valore;
LeaveCriticalsection(unit_Principale.Frm_Principale.ACriticalSection);
end
else
begin
EnterCriticalsection(Principale.Frm_PrincipaleGetBilancia.ACriticalSection);
Principale.Frm_PrincipaleGetBilancia.SonoUscitoDalCicloLetturaFile:=valore;
LeaveCriticalsection(Principale.Frm_PrincipaleGetBilancia.ACriticalSection);
end;
finally
end;
except
on E: Exception do
begin
//codice da eseguire solo se si verifica un eccezzione
Self.Log('Errore funzione SetSonoUscitoDalCicloLetturaFile ' + E.Message);
end;
end;
end;
Quando Trim(UpperCase(Form1.GetConfigurazione('START_VENDITA'))) ritorna TRUE funziona bene tutto, quando ritorna FALSE restituisce questo errore
Il progetto Cassa ha sollevato un eccezzione di classe 'external: SIGSEGV'.
At address 7C911010
Ovviamente questo errore avviene quando eseguo
EnterCriticalsection(Principale.Frm_PrincipaleGetBilancia.ACriticalSection);
Chi mi sa dire cosa puņ essere?!
non c'entra molto con l'errore ma dovresti mettere il LeaveCriticalSection in un blocco try...finally
riguardo l'errore, hai chiamato preventivamente InitCriticalSection nel caso "FALSE"?
EnterCriticalsection(unit_Principale.Frm_Principale.ACriticalSection);
try
unit_Principale.Frm_Principale.SonoUscitoDalCicloLetturaFile:=valore;
finally
LeaveCriticalsection(unit_Principale.Frm_Principale.ACriticalSection);
end