none
Освобождение ресурсов RRS feed

  • Вопрос

  • Добрый день.

    Terminating a process has the following results:

    • Any remaining threads in the process are marked for termination.
    • Any resources allocated by the process are freed.
    • All kernel objects are closed.
    • The process code is removed from memory.
    • The process exit code is set.
    • The process object is signaled.

    Terminating a thread has the following results:

    • Any resources owned by the thread, such as windows and hooks, are freed.
    • The thread exit code is set.
    • The thread object is signaled.
    • If the thread is the only active thread in the process, the process is terminated. For more information, see 

    В тексте находящемся выше написано, что при завершении процесса ресурсы освобождаются. Но вот например в MSDN про меню:

    Before closing, an application must use the DestroyMenu function to destroy a menu not assigned to a window. A menu that is assigned to a window is automatically destroyed when the application closes.

    Разве первый и второй блок информации не входит в конфликт с третьим блоком, говорящим что все таки надо бы меню не связанное с окном уничтожить при  закрытии приложения

Ответы

  • Да, входит, если рассуждать в современных терминах. Но дело в том, что в Windows не всегда существовало понятие "процесс".

    Windows начала существование как 16-битная ОС, в которой уже была функциональность GUI примерно такого же вида, как сейчас, но функциональность ядра была совершенно другой. Все программы работали в одном адресном пространстве, вместо понятия "процесс" существовали "экземпляры приложения". Меню тогда могли быть глобальными объектами, разделяемыми между несколькими приложениями, так что требование явного освобождения меню было нормальным. Учитывая, что в разделе про меню упоминается термин "приложение" вместо термина "процесс", я могу сделать смелую догадку, что этот раздел никто не позаботился переписать с того момента, когда он был первоначально был написан для 16-битной Windows. В современных Windows этот пункт, я думаю, уже не актуален, так как объекты GUI, к которым относится и меню, локальны для создавшего процесса и освобождаются автоматически при завершении процесса.

    • Помечено в качестве ответа haprlera 6 мая 2018 г. 13:18

Все ответы

  • Да, входит, если рассуждать в современных терминах. Но дело в том, что в Windows не всегда существовало понятие "процесс".

    Windows начала существование как 16-битная ОС, в которой уже была функциональность GUI примерно такого же вида, как сейчас, но функциональность ядра была совершенно другой. Все программы работали в одном адресном пространстве, вместо понятия "процесс" существовали "экземпляры приложения". Меню тогда могли быть глобальными объектами, разделяемыми между несколькими приложениями, так что требование явного освобождения меню было нормальным. Учитывая, что в разделе про меню упоминается термин "приложение" вместо термина "процесс", я могу сделать смелую догадку, что этот раздел никто не позаботился переписать с того момента, когда он был первоначально был написан для 16-битной Windows. В современных Windows этот пункт, я думаю, уже не актуален, так как объекты GUI, к которым относится и меню, локальны для создавшего процесса и освобождаются автоматически при завершении процесса.

    • Помечено в качестве ответа haprlera 6 мая 2018 г. 13:18
  • Благодарю за ответ.

    Весьма логично, так что походу так и есть.