1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| procedure TraceMessage(sMessage : string);
begin
// Création ou récupération du mutex d'accès au fichier lstmess.csv
SetLastError(NO_ERROR);
if(g_SpyMutex = 0)then
begin
g_SpyMutex := CreateMutex(nil, false, PChar(sNomMutex)); // <= Création du mutex
end;
if (GetLastError=ERROR_ALREADY_EXISTS) then
begin
g_SpyMutex := OpenMutex(MUTEX_ALL_ACCESS , false, PChar(sNomMutex)); // <= Recuperation du mutex si déjà existant
end;
// Réservation du mutex
WaitForSingleObject(g_SpyMutex,INFINITE); // <= Utilisation du mutex
try
// Création de l'objet à tracer dans l'espion
SpyMessage := TSpyMessage.create(...);
// Création ou réutilisation du thread de gestion de l'espion.
if(not(Assigned(g_ThreadGestionEspion)))then
begin
g_ThreadGestionEspion := TThreadGestionEspion.create(false,true);
end;
// Dépot de l'objet à tracer dans l'espion sur le dessus de la pile des objets à tracer.
g_ThreadGestionEspion.Addmessage(SpyMessage);
Finally
// Libération du mutex d'accès au fichier lstmess.scv
ReleaseMutex(g_SpyMutex);// <= Liberation du mutex
end;
end; |
Partager