__slots__
хороший способ сохранить память, но очень трудно получить dict значений объекта. Вообразите следующий объект:
class Point(object):
__slots__ = ('x', 'y')
Теперь, когда объект, очевидно, имеет два атрибута. Теперь мы можем создать экземпляр его и создать dict из него этот путь:
>>> p = Point()
>>> p.x = 3
>>> p.y = 5
>>> dict((k, getattr(p, k)) for k in p.__slots__)
{'y': 5, 'x': 3}
Это однако не будет работать, если точка была разделена на подклассы, и были добавлены новые слоты. Однако Python автоматически реализует __reduce_ex__
для помощи copy
модуль. Этим можно злоупотребить для получения dict значений:
>>> p.__reduce_ex__(2)[2][1]
{'y': 5, 'x': 3}
После просмотра исходного кода библиотеки времени выполнения Delphi и документации Microsoft; Я могу подтвердить комментарии Мэйсона и Пола-Яна.
Иерархия завершения работы следующая
Application.Terminate()
performs some unidentified housekeeping of application
calls Halt()
Halt()
calls ExitProc if set
alerts the user in case of runtime error
get rid of PackageLoad call contexts that might be pending
finalize all units
clear all exception handlers
call ExitprocessProc if set
and finally, call ExitProcess() from 'kernel32.dll'
ExitProcess()
unloads all DLLs
uses TerminateProcess() to kill the process
Halt (0) раньше был старым добрым способом сказать программе о немедленном завершении работы. Там' Возможно, это более удобный для Delphi способ сделать это сейчас, но я уверен, что halt (0) все еще работает. :-)
Если предложение HeartWare об использовании ExitProcess () терпит неудачу, возможно, вы используете некоторые библиотеки DLL, которые плохо реагируют на DLL_PROCESS_DETACH. В этом случае попробуйте использовать TerminateProcess (getCurrentProcess, 0);
После того, как вы прибегнете к таким мерам, можно задаться вопросом, выдерживает ли «чистая» часть заголовка темы досконально.
The last time I had to hunt a problem like this was the shutdown was a causing an event (resize? It's been a while.) to fire on the dying window causing an attempt to redraw something that needed stuff that had already been disposed of.