2010-02-25 10 views
2

J'avais l'impression que si une application a un handle ouvert et qu'elle plante, le handle n'est pas libéré et si vous essayez d'accéder à ce handle (disons d'un fichier), vous obtiendrez un Erreur.Qu'arrive-t-il aux poignées ouvertes lorsqu'une application se bloque? (Windows XP et versions ultérieures)

Cependant, j'ai essayé cela dans Windows XP et le handle semble être libéré si je ferme l'exe du gestionnaire de tâches, avant qu'il ait fermé la poignée. Voici le code:

Private Sub Form_Load() 
    Dim iFile As Integer 
    iFile = FreeFile   
    Open "myfilelock" For Output Lock Read Write As #iFile 
    MsgBox "About to close" 'close it here with task manager 

    Close #iFile 

End Sub 

Ainsi, Windows XP ne libère toutes les poignées partir ouvertes au cas où l'exe ayant ces accidents poignées?

Répondre

4

Toutes les versions de Windows gèrent les poignées du noyau lorsqu'une application se bloque. Même Windows 95 l'a fait. Et certainement tout ce qui est basé sur le noyau Windows NT ou plus tard fermera les poignées du noyau sur un plantage d'application.

Cela inclut des poignées pour les fichiers, les événements, les sémaphores, la mémoire partagée, les tuyaux et les prises

+1

+1. Bien, il y avait des versions de Windows avant Windows 95 vous savez :) Ce n'était pas vrai dans Windows 16 bits, mais je suppose que c'est l'histoire ancienne maintenant ... peut-être http://blogs.msdn.com/oldnewthing/archive/ 2004/03/01/82103.aspx – MarkJ

1

Tout est moderne d'OS nettoyer toutes les ressources du programme lorsqu'un programme se termine ou accidents - mémoire, poignées, prises, fils, etc. Sinon, vous obtiendriez des fuites massives de ressources de chaque handle qu'un développeur d'applications a oublié de fermer à la sortie, et devrez redémarrer périodiquement votre ordinateur ...

+1

Je trouve que je dois redémarrer périodiquement Windows de toute façon :) –