-
Добрый день.
Как правильно из потока, созданного через BeginThread записать строку в поле TMemo?
Знаю, что писать через свойство lines неправильно.
Также знаю, что для класса TThread для этого предназначен Synchronize.
А как быть с апи потоками?
-
> как быть с апи потоками?
а там обязательно нужен апи поток?
можно через PostMessage форме, а в ее обработчике уже как обычно
-
> можно через PostMessage форме
SendMessage
-
> SendMessage
это будет то же самое, что прямой вызов метода формы
-
неа , это кокраз будет синхронизация по винапишному
а пока до формы дойдет месадж от PostMessage буфер передаваемой строки уже сто раз изменится либо вообще может быть высвобожден
-
> неа , это кокраз будет синхронизация по винапишному
это как?
-
Удалено модератором
-
> точно также работает Synchronize
Synchronize работает не точно также
-
> clickmaker © (11.03.11 12:50) [3]
> это будет то же самое, что прямой вызов метода формы
Нет
> clickmaker © (11.03.11 14:28) [7]
До 5 дельфи включительно или точнее скажу так - в 5 дельфи (я смотрел исходники) Synchronize работал используя SendMessage. С шестой уже Synchronize реализован по другому
-
> Synchronize работает не точно также
рад что ты смотрел исходники :)
только я имел ввиду не способ реализации а способ работы, а если нет разници то зачем платить больше
-
> Synchronize работает не точно также
- начиная с D7 - я в свое время тоже удивился...
А SendMessage один фиг будет...
Что самое прикольное, все - кроме memo.Text и memo.Lines.Text(которые дергают Perform вместо SendMessage) - потокобезопасно, т.к. - через то самое место...
-
> Perform вместо SendMessage
да, SendMessage поток переключит. Как-то вылетело из головы