Bonjour à tous et à toutes ,
Je voudrais savoir comment éviter une fuite mémoire lorsqu'on stop un thread.
Evidement, j'ai activé ReportMemoryLeaksOnShutDown := true; dans mon dpr
Cela arrive si je stop mon téléchargement encours en fermant mon application
J'ai essayé de jouer avec le destructor du thread, mais je ne sais pas quoi libérer, voici un des threads concerné :
Le Thread
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Destructor TDownloadStatus.Destroy; begin FreeAndNil('????'); inherited; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 TDownloadStatus = class(TInterfacedObject, IBindStatusCallback) private Wnd :hWnd; public function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall; function GetPriority(out nPriority): HResult; stdcall; function OnLowResource(reserved: DWORD): HResult; stdcall; function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult; stdcall; function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall; function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall; function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc; stgmed: PStgMedium): HResult; stdcall; function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall; public Constructor Create(const aWnd :hWnd); Destructor Destroy; override; { Destructeur } end;
Et pour le deuxieme, cela ne change rien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Destructor TDownloadNewVersionThread.Destroy; begin FreeAndNil(Status); inherited; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 //Tâche téléchargement TDownloadNewVersionThread = class(TThread) private Wnd :hWnd; //Fenêtre qui reçoit les notifications RemoteFile :string; //HTTP://... fichier nouvelle version Status :TDownloadStatus; protected procedure Execute; override; public constructor Create(const aWnd :hWnd; const aRemoteFile :string); Destructor Destroy; override; { Destructeur } end;
Merci.
Partager