Dec
|
Posted: Sat Feb 18, 2012 10:01 Post subject: Многопоточность в плагинах на Delphi |
|
|
Недавно я в одном своем проекте, использующем свою систему плагинов, бился с непонятным багом, который проявлялся в ошибках доступа к памяти. Ошибка возникала в плагинах в разных местах при разных входных данных. Функций из плагинов вызывались из множества потоков. Я перелопатил весь свой код, пытаясь понять закономерность, но безуспешно. Но случайно вспомнил про хитрую переменную IsMultiThread модуля System, отвечающую за работу менеджера памяти. Установил ее в плагинах в True, тем самым переведя менеджер памяти в многопоточный режим работы, и ошибка исчезла.
Теоретически, функции в плагинах к TC тоже могут вызываться из разных потоков. А поскольку IsMultiThread по умолчанию равно False, то вы можете поиметь такие же проблемы, как и я. Поэтому рекомендую в ваших плагинах, допускающих многопоточность, устанавливать IsMultiThread в True. |
|