Это происходит в половине случаев закрытия моего приложения, в которое я поместил TLMDHiTimer в мою форму во время разработки, Enabled установлен в true. В моем событии OnFormClose я вызываю MyLMDHiTimer.Enabled: = false. Когда это вызывается, я иногда (примерно в половине случаев) получаю это исключение.
Я отлаживал и входил в вызов и обнаружил, что это строка 246 в LMDTimer.pas, которая дает эту ошибку.
FThread.Terminate;
Я использую последнюю версию LMDTools. Я сделал полную переустановку инструментов LMD до уик-энда и удалил и снова добавил компонент в форму правильно.
Из того, что я нашел, это имеет какое-то отношение к TExternalThread, но там нет документации от Embarcadero, и я не нашел ничего, ссылающегося на него в исходном коде LMDTools.
Использование полностью обновленного RAD Studio 2010, Delphi 2010.
Что меня действительно расстраивает, так это отсутствие документации. Результат Google yeilds один, который на самом деле говорит об этом, в котором кто-то говорит, что ошибка вызвана попыткой прервать TExternalThread. Но, глядя на исходный код этого LMDHiTimer, он ни разу не пытается сделать что-либо, кроме создания обычного TThread. Один результат Google, который я смог найти, Тема: Не удается завершить созданный извне поток? на Embarcadero упоминает, используя GetCurrentThread() и GetCurrentThreadId(), чтобы получить данные, необходимые для подключения к существующему потоку, но TLMDHiTimer не делает этого. Он просто создает собственный потомок TThread со своим собственным конструктором Create() (переопределенный, конечно, и вызовы, унаследованные в начале конструктора)
Итак... Какого черта это TExternalThread? Кто-нибудь еще сталкивается с подобным исключением? И, возможно, выяснили решение или обходное решение? Я попросил почти тот же самый вопрос для собственной поддержки LMDTools, но он не может повредить спросить в нескольких местах.
Заранее благодарим за любую помощь.