Как вы полностью прервите программу Delphi?
У меня есть программа, которая имеет некоторые проблемы во время выключения, что вызывает исключения, которые я не могу отследить до их источника. Похоже, что он связан с хронометром и не является детерминированным. Это происходит после того, как все разделяемые ресурсы были выпущены, и поскольку это завершение работы, утечки памяти не являются проблемой, поэтому меня удивляет, есть ли способ просто сказать программе немедленно прекратить работу и освободить разделяемые ресурсы вместо продолжая последовательность выключения и предоставляя сообщение об ошибке.
Кто-нибудь знает, как это сделать?
Ответы
Ответ 1
После просмотра исходного кода библиотеки времени 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
Ответ 2
ExitProcess (0)?
Ответ 3
Halt (0) раньше был добрым старомодным способом сказать программе, чтобы она закончилась с немедленным эффектом. Вероятно, теперь есть более удобный для Delphi способ сделать это, но я на 95% уверен, что остановка (0) все еще работает.:-)
Ответ 4
Если предложение HeartWare об использовании ExitProcess() не удастся, возможно, вы используете некоторую DLL, которая не отвечает на DLL_PROCESS_DETACH. В этом случае попробуйте использовать TerminateProcess (getCurrentProcess, 0);
Как только вы прибегаете к таким мерам, можно задаться вопросом: "чисто" часть названия темы по-прежнему подходит для проверки.
Ответ 5
В прошлый раз, когда мне приходилось искать такую проблему, выключение было причиной того, что событие (изменение размера?) прошло некоторое время.), чтобы выстрелить в умирающее окно, что привело к попытке перерисовать что-то, что требовало того, что уже было удаляется.