Как Вы чисто прерываете программу Delphi?

__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}
19
задан Mason Wheeler 26 July 2009 в 16:09
поделиться

5 ответов

После просмотра исходного кода библиотеки времени выполнения 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
19
ответ дан 30 November 2019 в 03:48
поделиться

Halt (0) раньше был старым добрым способом сказать программе о немедленном завершении работы. Там' Возможно, это более удобный для Delphi способ сделать это сейчас, но я уверен, что halt (0) все еще работает. :-)

4
ответ дан 30 November 2019 в 03:48
поделиться

Если предложение HeartWare об использовании ExitProcess () терпит неудачу, возможно, вы используете некоторые библиотеки DLL, которые плохо реагируют на DLL_PROCESS_DETACH. В этом случае попробуйте использовать TerminateProcess (getCurrentProcess, 0);

После того, как вы прибегнете к таким мерам, можно задаться вопросом, выдерживает ли «чистая» часть заголовка темы досконально.

4
ответ дан 30 November 2019 в 03:48
поделиться

ExitProcess (0)?

6
ответ дан 30 November 2019 в 03:48
поделиться

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.

1
ответ дан 30 November 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: