SASGIS - SAS.Планета
View Issue Details
0002256SAS.ПланетаРефакторингpublic19-11-2013 15:5321-11-2013 14:33
vdemidov 
vdemidov 
normalmajoralways
resolvedfixed 
Windows7Professional
121010 
140303140303 
0002256: Зависание при ошибке в конструкторе потоков обработки операций с выделенной областью
Сейчас все операции с выделенной областью реализованы в виде наследников TThread автоматически запускаемого при создании. При любом ексепшене в конструкторе этих классов в Delphi 2007 (в других может быть по-другому) программа тупо зависает.

Похоже самое надежное решение - стартовать созданный поток отдельно в провайдерах операций с выделенной областью. Добавится по одной строчке на каждое создание потока.
No tags attached.
related to 0002019resolved vdemidov Зависание при запуске генерации вышележащих слоёв без выбранных зумов 
Issue History
19-11-2013 15:53vdemidovNew Issue
19-11-2013 15:53vdemidovIssue generated from: 0002019
19-11-2013 15:53vdemidovRelationship addedrelated to 0002019
19-11-2013 15:53vdemidovStatusnew => confirmed
21-11-2013 13:00vdemidovStatusconfirmed => resolved
21-11-2013 13:00vdemidovFixed in Version => 140303
21-11-2013 13:00vdemidovResolutionopen => fixed
21-11-2013 13:00vdemidovAssigned To => vdemidov
21-11-2013 14:25zedNote Added: 0013294
21-11-2013 14:33vdemidovNote Added: 0013295

Notes
(0013294)
zed   
21-11-2013 14:25   
По-моему в Delphi потоки всегда создаются приостановленными и запускаются только в методе TThread.AfterConstruction, если пользователь явно не указал Suspended = True. Т.е. если у нас происходит исключение в конструкторе, то AfterConstruction не вызовется (как и Destroy) и поток так и останется зависшим. И то, что ты переделал на Suspended = True и ручной вызов Resume после конструктора, по-моему ничего не изменит. Скорее всего тут дополнительно нужно ещё весь конструктор обернуть в try/except и при исключении выставлять флаг, который и проверять перед вызовом Resume.

P.S. И ещё - метод Resume объявлен как deprecated в D2010 и выше.
(0013295)
vdemidov   
21-11-2013 14:33   
Изменит. Проверял в дебагере, но только под 2007 делфой, под другими не знаю.

>P.S. И ещё - метод Resume объявлен как deprecated в D2010 и выше.
Увы, но альтернатива ему метод Start (не помню точное название) в 2007 делфе еще не определен, так что до полного перехода на XE2 придется терпеть.