Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    51

    Problema di memoria

    Ciao a tutti. Per intercettare l'esecuzione di un'applicazione (es. Internet Explorer) utilizzo una funzione all'interno della quale si trova il seguente comando

    Handler := CreateToolHelp32Snapshot ( TH32CS_SNAPALL, 0 ) ;

    Dato che la funzione viene richiamata durante il ciclo di un timer o con un thread dopo un certo periodo di tempo la memoria si riempie a causa dell'esecuzione del comando di cui sopra visualizzando il messaggio "Memoria virtuale insufficiente ecc...". C'è un modo per rilasciare la memoria utilizzata dalla funzione una volta eseguita??

    Grazie a tutti quelli che sapranno rispondermi

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,311
    Pare che sia un problema conclamato. Leggi qui.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    51
    Ok, da quel che ho capito è un problema di windows non risolvibile via codice. Potresti per caso indicarmi una qualche procedura o funzione che mi avvisi quando un'applicazione viene eseguita? Quella che uso io è la seguente ma, come ho detto, crea dei problemi con la memoria

    codice:
    //------------------------------------------------------------------------------
         Function ApplicazioneInEsecuzione ;
    //------------------------------------------------------------------------------
    
    Var
      Data            : TProcessEntry32 ;
      Handler         : THandle ;
      ProcessoTrovato : Boolean ;
    
    Begin
      ProcessoTrovato := False ;
      Try
        Handler := CreateToolHelp32Snapshot ( TH32CS_SNAPALL, 0 ) ;
        Data.dwSize := SizeOf ( TPROCESSENTRY32 ) ;
        If Process32First( Handler, Data )
          Then Begin
                 While Process32Next ( Handler, Data )
                   Do Begin
                        If ( GetName ( Data, Length ( NomeApplicazione ) ) =
                           UpperCase ( NomeApplicazione ) )
                          Then Begin
                                 ProcessoTrovato := True ;
                                 ProcessID := Data.th32ProcessID ;
                               End;
                      End;
               End;
      Except
        //
      End;
      ApplicazioneInEsecuzione := ProcessoTrovato ;
    End;
    La funzione GetName() non fa altro che cercare la stringa NomeApplicazione all'interno della lista dei processi in esecuzione:

    codice:
    //------------------------------------------------------------------------------
         Function GetName ;
    //------------------------------------------------------------------------------
    
    Var
      Posizione    : Byte ;
      NomeProcesso : String ;
    
    Begin
      NomeProcesso := '' ;
      For Posizione := 0 to Lunghezza - 1
        Do Begin
             NomeProcesso := NomeProcesso + Data.szExeFile [ Posizione ] ;
           End;
      GetName := UpperCase ( NomeProcesso ) ;
    End;

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    51
    Ho finalmente scoperto come risolvere il problema. Una volta creato l'oggetto Handler con la CreateToolHelp32Snapshot ed eseguite tutte le operazione basta un semplice CloseHandle (Handler) per rilasciare la memoria

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,311
    Originariamente inviato da roby23
    Ho finalmente scoperto come risolvere il problema. Una volta creato l'oggetto Handler con la CreateToolHelp32Snapshot ed eseguite tutte le operazione basta un semplice CloseHandle (Handler) per rilasciare la memoria
    I posteri te ne saranno grati: ottima idea il riportare la soluzione!

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.