Bonjour,

Voilà je développe actuellement une application de type VNC, avec affichage d'écran à distance. J'avais déjà un problème au niveau de la gestion mémoire serveur, mais maintenant c'est au niveau du client (celui qui affiche les images à distance) où la taille du processus en mémoire augmente constamment.

Donc en fait mes images sont envoyées d'un Composant StreamServer vers un StreamClient (NMStrm) . Quand celui-ci reçoit des données on execute ce code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Affichage *thread_affiche = new Affichage(false,strm);
delete strm,thread_affiche;
Donc en fait j'ai modifié le constructeur du thread afin de passer en paramètre le flux entrant. Et voici le code du thread en lui même :

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
TMemoryStream *flux;
 
 
 
__fastcall Affichage::Affichage(bool CreateSuspended,TStream *strm)
        : TThread(CreateSuspended)
{
FreeOnTerminate=true;
flux = new TMemoryStream();
flux->LoadFromStream(strm);
delete strm;
 
}
 
__fastcall Affichage::Affichage(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
 
 
void __fastcall Affichage::Execute()
 
{
TJPEGImage *affiche = new TJPEGImage();
affiche->LoadFromStream(flux);
delete flux;
Form12->PaintBox1->Canvas->Draw(0,0,affiche);
delete affiche;
Terminate();
 
}
Donc en fait le flux rentrant est chargé dans un objet de type JPG et ensuite affiché dans un Paintbox. je pense avoir bien libéré la mémoire a chaque étape quelqu'un aurait donc t-il une solution svp ? Merci d'avance !!