| Anonymous | Login | Signup for a new account | 22-10-25 18:20 UTC | ![]() |
| All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
| My View | View Issues | Change Log | Roadmap | Search |
| View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
| ID | Project | Category | View Status | Date Submitted | Last Update | ||||
| 0002256 | SAS.Планета | Рефакторинг / Refactoring | public | 19-11-2013 15:53 | 21-11-2013 14:33 | ||||
| Reporter | vdemidov | ||||||||
| Assigned To | vdemidov | ||||||||
| Priority | normal | Severity | major | Reproducibility | always | ||||
| Status | resolved | Resolution | fixed | ||||||
| Platform | Windows | OS | 7 | OS Version | Professional | ||||
| Product Version | 121010 | ||||||||
| Target Version | 140303 | Fixed in Version | 140303 | ||||||
| Summary | 0002256: Зависание при ошибке в конструкторе потоков обработки операций с выделенной областью | ||||||||
| Description | Сейчас все операции с выделенной областью реализованы в виде наследников TThread автоматически запускаемого при создании. При любом ексепшене в конструкторе этих классов в Delphi 2007 (в других может быть по-другому) программа тупо зависает. Похоже самое надежное решение - стартовать созданный поток отдельно в провайдерах операций с выделенной областью. Добавится по одной строчке на каждое создание потока. | ||||||||
| Tags | No tags attached. | ||||||||
| Attached Files | |||||||||
Relationships |
||||||
|
||||||
Notes |
|
|
(0013294) zed (manager) 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 (manager) 21-11-2013 14:33 |
Изменит. Проверял в дебагере, но только под 2007 делфой, под другими не знаю. >P.S. И ещё - метод Resume объявлен как deprecated в D2010 и выше. Увы, но альтернатива ему метод Start (не помню точное название) в 2007 делфе еще не определен, так что до полного перехода на XE2 придется терпеть. |
Issue History |
|||
| Date Modified | Username | Field | Change |
| 19-11-2013 15:53 | vdemidov | New Issue | |
| 19-11-2013 15:53 | vdemidov | Issue generated from: 0002019 | |
| 19-11-2013 15:53 | vdemidov | Relationship added | related to 0002019 |
| 19-11-2013 15:53 | vdemidov | Status | new => confirmed |
| 21-11-2013 13:00 | vdemidov | Status | confirmed => resolved |
| 21-11-2013 13:00 | vdemidov | Fixed in Version | => 140303 |
| 21-11-2013 13:00 | vdemidov | Resolution | open => fixed |
| 21-11-2013 13:00 | vdemidov | Assigned To | => vdemidov |
| 21-11-2013 14:25 | zed | Note Added: 0013294 | |
| 21-11-2013 14:33 | vdemidov | Note Added: 0013295 | |
| 08-08-2025 13:25 | zed | Category | Рефакторинг => Рефакторинг / Refactoring |
| My View | View Issues | Change Log | Roadmap | Search |
| Copyright © 2007 - 2025 SAS.Planet Team |