Notes |
|
(0013504)
|
zed
|
08-01-2014 04:42
|
|
Вариант 3: использовать обычный CallBack. Тем более, что сейчас этот нотифаер так и используется - у него всегда один листнер и он в том же классе, который создаёт нотифаера. Таким образом, передав в конструктор TTileRequestTask наш коллбэк, получим профит в простоте реализации (без пула) и отсутствии оверхэда на примитивах синхронизации. |
|
|
(0013506)
|
zed
|
08-01-2014 05:35
|
|
Ещё плюсом будет то, что в коллбэке можно будет передать сразу 2 параметра: ITileRequestTask (Self) и ITileRequestResult из-за чего мы cможем смело прибить метод TTileRequestTask.GetResult и избавиться от ещё одной синхронизации. |
|
|
|
Может и так. Только нужно внимательно смотреть, за подсчетом ссылок и за временем жизни, а то могут быть очень веселые эффекты. Плюс в качестве CallBack нужно будет объявлять или отдельный интерфейс, или делать простую функцию, а объект передавать через обычный указатель (procedure of object в интерфейсе качалки использовать очень не хочется, что бы не привязываться к делфовским типам) |
|
|
(0013513)
|
zed
|
08-01-2014 10:25
|
|
> procedure of object в интерфейсе качалки использовать очень не хочется
А интерфейса качалки оно и не коснётся. Качалка вызывает метод
ITileRequestTaskInternal.SetFinished(const AResult: ITileRequestResult) |
|
|
(0013529)
|
zed
|
08-01-2014 16:54
|
|
Да, пришлось таки коллбэк обернуть в интерфейс.
И ещё попутный момент: а почему в этом же TTileRequestTask для отмены операции используется именно INotifierOneOperation, а не обычный INotifierOperation? Там же тоже оверхэд появляется на каждый запрос. |
|