|
|
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
В современных версиях Delphi присутствует метод TThread.Queue, который позволяет дополнительному вызвать метод или анонимную процедуру в контексте главного потока. Метод TThread.Queue отличается от TThread.Synchronize тем, что он возвращает управление сразу, а не дожидается, когда главный поток произведёт вызов процедуры. В связи с этим, благодаря TThread.Queue мы получаем проблемы, которых не было при использовании Synchronize, например: - проблема многопоточного доступа к объектам / массивам / строкам Если сравнивать Queue с PostMessage, то PostMessage выглядит более универсальным, т.к. он позволяет надёжно передать данные в основной поток. На мой взгляд, Queue не является надёжным способом передачи данных в основной поток, зато он является кроссплатформенным способом выполнить вызов метода или анонимной процедуры в контексте основного потока, а уже при вызове процедуры можно запросить необходимые данные из доп. потока. В каких случаях Вы используете метод TThread.Queue и почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2020, 19:02 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer На мой взгляд, Queue не является надёжным способом передачи данных в основной поток Хотя кривыми руками сломать что угодно можно. Ну и на последок: Queue вообще не является способом передачи данных, это способ выполнения кода в главном потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2020, 19:59 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
rgreat DmSer На мой взгляд, Queue не является надёжным способом передачи данных в основной поток Хотя кривыми руками сломать что угодно можно. Мне сложно представить, сколько лет нужно готовить Delphi-программиста, чтобы он смог корректно использовать метод Queue и не волновался о форме своих рук :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2020, 22:24 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
rgreat Queue вообще не является способом передачи данных, это способ выполнения кода в главном потоке. В официальной документации про Queue практически ничего нет. Зачем его делали - непонятно. Synchronize - является способом передачи данных в основной поток, SendMessage, PostMessage - являются. А вот Queue - не является. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2020, 22:27 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer Мне сложно представить, сколько лет нужно готовить Delphi-программиста, чтобы он смог корректно использовать метод Queue и не волновался о форме своих рук :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2020, 22:34 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer В официальной документации про Queue практически ничего нет. Зачем его делали - непонятно. Документация есть. Может ты не там ищешь? http://docwiki.embarcadero.com/Libraries/Rio/en/System.Classes.TThread.Queue "Unlike Synchronize, execution of the current thread is allowed to continue" Что непонятного? Synchronize - является способом передачи данных в основной поток В той же степени как лодочное весло является способом передачи людей с одного берега реки на другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2020, 22:39 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
Для простоты можешь считать что Queue=PostMessage ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2020, 23:02 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
rgreat DmSer В официальной документации про Queue практически ничего нет. Зачем его делали - непонятно. Документация есть. Может ты не там ищешь? http://docwiki.embarcadero.com/Libraries/Rio/en/System.Classes.TThread.Queue "Unlike Synchronize, execution of the current thread is allowed to continue" Что непонятного? Про назначение метода Queue вопросов нет. Проблема в том, что его добавили, как правильно пользоваться не объясняют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2020, 23:43 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer Проблема в том, что его добавили, как правильно пользоваться не объясняют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2020, 23:52 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
white_nigger Для простоты можешь считать что Queue=PostMessage Хотелось бы так считать, но не получается. В случае PostMessage мы может передавать данные через wParam и lParam, мы имеем полный контроль над своей программой. В случае Queue нет никаких wParam и lParam. Есть только 2 варианта передачи данных: 1) заранее сохранить данные в полях класса, а затем их обработать при вызове процедуры из главного потока; 2) использовать анонимную процедуру и надеяться, что в момент вызова процедуры данные будут теми же, что и при вызове метода Queue. Получается, что очередь вызовов у нас есть, а очередь данных - как повезёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2020, 23:55 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
Если тебя 2 жалких инта в качестве передаваемых данных полностью устраивают - флаг тебе в руки. Потому что если нет - то Send/PostMessage в плане передачи данных ничем не отличаются от других вариантов что ты перечислил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 00:17 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
rgreat Если тебя 2 жалких инта в качестве передаваемых данных полностью устраивают - флаг тебе в руки. Потому что если нет - то Send/PostMessage в плане передачи данных ничем не отличаются от других вариантов что ты перечислил. В SendMessage / PostMessage я могу передать ссылку на объект, который создаю перед вызовом и заполняю необходимыми данными. В случае Queue, если использовать такую же схему, нужно будет проверять, что окажется захвачено в анонимной процедуре: ссылка на созданный объект или ссылка на переменную. Проверю позже. Так ведь ещё пишут, что при уничтожении потока будут автоматически уничтожены все необработанные вызовы, которые добавил метод Queue, а в таком случае получим сразу 2 проблемы: 1) вызов Queue был, а запуска в главном потоке не было; 2) объект был создан, код удаления вызван не будет, произойдёт утечка памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 00:33 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 00:39 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
будут автоматически уничтожены все необработанные вызовы Если первым параметром передать nil, то вызовы будут обработаны в любом случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 01:38 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer В каких случаях Вы используете метод TThread.Queue и почему? Странный вопрос. Да почти везде использую, где нужно выполнить что-то в контексте главного потока из других. synchronize - не использую, потому что вызовов много, и в итоге они дружно так завешивают все наглухо. А насчет опасности - да нет там никакой опасности. Если где-то есть вероятность наложения - критсекциями обмазываешь нужный кусок кода и вперед. P.S. Ну и конечно подчищать очередь перед убиением потока, как написали уже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 08:12 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
Ещё такую хрень нужно учитывать: https://stackoverflow.com/questions/42280937/delphi-queue-and-synchronize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 09:17 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer, Ты опять папины трусы одел? Настоящий DmSer под уровню опыта и эрудиции на две головы выше тебя. Странно слышать такие вопросы по этим ником ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 09:57 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer Ещё такую хрень нужно учитывать: https://stackoverflow.com/questions/42280937/delphi-queue-and-synchronize учитывать, что автор вопроса не понимает, как это все вообще устроено? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 10:02 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
Vizit0r DmSer Ещё такую хрень нужно учитывать: https://stackoverflow.com/questions/42280937/delphi-queue-and-synchronize учитывать, что автор вопроса не понимает, как это все вообще устроено? Как это всё устроено я в курсе. Меня интересует best practices по использованию Queue. Если это важно, отмечу, что я не использовал Queue и не было таких планов. Вопрос я задал для других целей, каких именно - позже узнаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 11:23 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer Vizit0r пропущено... учитывать, что автор вопроса не понимает, как это все вообще устроено? Как это всё устроено я в курсе. я вообще про автора вопроса с SO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 12:09 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
rgreat Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Данный способ передачи данных мне представляется наиболее надёжным, подойдёт в качестве примера. Но тут Queue используется лишь для уведомления главного потока о том, что подготовлены данные. Если кто-то поделится ещё примерами буду рад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 13:09 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
TThread.Queue и Synchronize 1) Никуда не передают данные и не должны. Я вообще не понимаю такого термина как передача данных между потоками. Потоки это способ асинхронного выполнения кода. 2) Используя эти методы проблем с доступом к коллекциям/объектам не будет, если они иммутабельны или потокобезопасны. 3) Задача TThread.Queue - асинхронно выполнить в контексте главного потока переданный код относительно потока, в котором был вызван (Обычно для обновления VCL-компонентов) 4) Задача TThread.Synchronize - синхронно выполнить в контексте главного потока переданный код относительно потока, в котором был вызван (Обычно для обновления VCL-компонентов) Другие задачи в методах которые были вызваны используя Queue и Synchronize решать нельзя. Для этого существуют другие примитивы и подходы. TThread.Queue - используется везде, где необходимо обновить визуальную составляющую VCL, когда обработка пришедших данных (REST/HTTP/TCP) приходит в потоках отличных от главного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 18:40 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer В официальной документации про Queue практически ничего нет. Зачем его делали - непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 21:01 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
Никто ничего не понимает ... Ну кроме Белого Негра (да простят меня все за рассизм). По сути, Queue / Synchronize помещают сообщения в очередь сообщений, обрабатываемых в основном потоке вызовом CheckSynchronize. По умолчанию, CheckSynchronize вызывается библиотеками когда основной поток простаивает. Консольное приложение почти не вызовет CheckSynchronize. Synchronize ждет обработки сообщения, Queue - не ждет. И та и другая получают либо обработчик либо анонимный метод. Это и определяет как будет жить контекст. В том же обработчике ни кто не запрещает вызвать Self.Destroy. Так что это очередь объектных сообщений для главного потока. Как с ней обращаться - каждый сам решает. Примеры: * поток хочет известить главный поток срочно и дождаться - Synchronize * поток хочет известить главный поток и пофигу когда тот отреагирует - Queue Последнее подходит для каких-либо прогрессов выполнения. Первое - ... для большинства остального, когда исполнпение обработчика может повлиять на основной код. И тд ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 23:01 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev, Единственное, что в этом зажигательном спиче показалось интересным, так это "почти не вызовет". Прошу пояснить.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2020, 23:31 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
Мне удалось собрать всю необходимою информацию для того, чтобы продолжить своё занятие в отпуск. Разобрался, как использовать Queue для организации надежной передачи данных в основной поток без использования дополнительных списков (пришлось таки поставить современную Delphi с поддержкой Queue и поэкспериментировать с анонимными процедурами :). Удалось подготовить наглядный пример, который показывает все аспекты работы Queue. Всем спасибо за участие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2020, 00:44 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
Vlad F Dmitry Arefiev, Единственное, что в этом зажигательном спиче показалось интересным, так это "почти не вызовет". Прошу пояснить.)) По тем же причинам Synchronize/Queue на работают в dll. По тем же причинам Synchronize/Queue на работают нигде до вызова Application.Run. А из-за костыля, который лечит дедлоки этого механизма, вызов метода TThread.WaitFor (а он вызывается и в деструкторе) в главном потоке - грузит проц на 100%. В общем, Synchronize/Queue - это то, чего не надо было делать в Delphi и использовать тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2020, 09:29 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
YuRock, Со всем этим не спорю, но тогда так и надо прямо писать. А то получается как "немного беременна". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2020, 10:15 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer rgreat Queue вообще не является способом передачи данных, это способ выполнения кода в главном потоке. В официальной документации про Queue практически ничего нет. Зачем его делали - непонятно. Synchronize - является способом передачи данных в основной поток, SendMessage, PostMessage - являются. А вот Queue - не является. SendMessage, PostMessage - рождает кучу трудноуловимых багов в VCL. По тем проектам, на которые я попадал, я только за этот год поймал и пофиксил около 3-х багов ими вызванных первоначально, как только массово вошла в эксплуатацию 10-ка, этих багов было вообще пруд пруди ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2020, 11:49 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
DmSer В каких случаях Вы используете метод TThread.Queue и почему? Dmitry Arefiev Последнее подходит для каких-либо прогрессов выполнения DmSer В случае PostMessage мы может передавать данные через wParam и lParam, мы имеем полный контроль над своей программой. В случае Queue нет никаких wParam и lParam ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2020, 12:44 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
vavan но все что нужно можно запихать в собственный враппер использующий механизм Queue/StaticQueue локализованный код легче исправить и отладить а то на KiUserCallbackDispatcher в багрепортах уже глаз дёргать начинает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2020, 13:50 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) если бы VCL не писали криворукие, может быть и работало бы SendMessage, PostMessage нормально. Но чуть тронешь в их обработчике гуи, то может быть конкретный пипец SendMessage, PostMessage - рождает кучу трудноуловимых багов в VCL. По тем проектам, на которые я попадал, я только за этот год поймал и пофиксил около 3-х багов ими вызванных А то я чото правда не могу придумать, использовал всегда и горя не знал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 01:16 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
YuRock kealon(Ruslan) если бы VCL не писали криворукие, может быть и работало бы SendMessage, PostMessage нормально. Но чуть тронешь в их обработчике гуи, то может быть конкретный пипец SendMessage, PostMessage - рождает кучу трудноуловимых багов в VCL. По тем проектам, на которые я попадал, я только за этот год поймал и пофиксил около 3-х багов ими вызванных А то я чото правда не могу придумать, использовал всегда и горя не знал.
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 07:28 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Не видел такого никогда.. А как добиться этих ошибок с помощью Post/SendMessage? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 09:32 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
YuRock, Такие ошибки возникают, когда программист не может правильно реализовать синхронизацию с основным потоком VCL. И это не зависит от Send/Postmessage или Synchronize. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 10:09 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
YuRock kealon(Ruslan), Не видел такого никогда.. А как добиться этих ошибок с помощью Post/SendMessage? ваш софт багрепорты делает? (EurekaLog, Madshi) вот, например, причина "Canvas don't allow drawing" Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 10:12 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), А что тут не устраивает? Девайс контекст после вызова процедуры станет невалидным, его таким и помечают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 10:33 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис kealon(Ruslan), А что тут не устраивает? Девайс контекст после вызова процедуры станет невалидным, его таким и помечают. старый контекст нужно сохранять и восстанавливать назад, иначе при попытке использовать такой Canvas из-за блокировки будет Canvas don't allow drawing" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 12:14 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), 1. Нет, багрерорты не делает. Хватает подробных логов. 2. Из-за этого может возникнуть проблема (ну я так вижу), только если перекрыть WM_PAINT, вызвать inherited и потом что-то пытаться рисовать через канвас. Ну это как бы обычно сразу не работает, если еще и логику с ветвлениями не наворотить... В общем, у меня с этим проблем не было. Ну, и главное - я не понял, при чем здесь Post/SendMessage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 13:57 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
YuRock, 1. стоит добавить. много интересного приходит чего никогда не наблюдаешь и повторить не получается, но после фикса багрепорты исчезают 2. нет, схема простая, у тебя идёт рисование, дальше "случайно" срабатывает обработчик сообщения, в котором тоже по различным причинам срабатывает эта же прорисовка - вот тебе неявная рекурсия, дальше обработчик возвращается в прорисовку и получаешь фейл, т.к. Canvas.Handle = 0. А так как багрепорты у тебя не настроены, стандартный обработчик покажет пользователю окно с ошибкой, а он его благополучно закроет и забудет. но если софт пишется для 10-ка человек, то конечно можно и дальше не заморачиваться на мелочи, типа 1 раз за млн запусков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 14:45 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) схема простая, у тебя идёт рисование, дальше "случайно" срабатывает обработчик сообщения, в котором тоже по различным причинам срабатывает эта же прорисовка - вот тебе неявная рекурсия Тут даже обсуждать нечего. Всё так же не понятно, при чем здесь Post/SendMessage (ну кроме SendMessage (из WM_PAINT!!!), у которого в обработчике UpdateWindow или выкрутка ) kealon(Ruslan) А так как багрепорты у тебя не настроены, стандартный обработчик покажет пользователю окно с ошибкой, а он его благополучно закроет и забудет. kealon(Ruslan) софт пишется для 10-ка человек Нет, еще три нуля - порядок где-то таков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 16:16 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
YuRock, плохо копаешь, копай WM_PRINT где юзается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2020, 23:45 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) YuRock, плохо копаешь, копай WM_PRINT где юзается В сфере моих программ такие сообщения не приходят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2020, 01:27 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
YuRock Возможно. В сфере моих программ такие сообщения не приходят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2020, 09:38 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) YuRock Возможно. В сфере моих программ такие сообщения не приходят. Я вообще не использую VCL давно, свою библиотеку использую. Но и сейчас, и раньше, когда использовал - не было проблем с отправкой и обработкой сообщений (видимо, компоненты, стреляющие мне в ногу, не попадались). Чего не могу сказать про Synchronize - в библиотеках-драйверах для СУБД эта гадость нет-нет, да используется, бывает, ну и доставляет тогда проблем, которые обходить приходится костылями, или переписывать их код на Send/PostMessage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2020, 18:10 |
|
||
|
В каких случаях вы используете метод TThread.Queue?
|
|||
|---|---|---|---|
|
#18+
YuRock Да нет, не добавлю. Я вообще не использую VCL давно, свою библиотеку использую. Но и сейчас, и раньше, когда использовал - не было проблем с отправкой и обработкой сообщений (видимо, компоненты, стреляющие мне в ногу, не попадались). Чего не могу сказать про Synchronize - в библиотеках-драйверах для СУБД эта гадость нет-нет, да используется, бывает, ну и доставляет тогда проблем, которые обходить приходится костылями, или переписывать их код на Send/PostMessage. так то и у меня есть, но приходится жить с тем за что денюжку платят - потому разговор про то как с ней жить:-) PS: те кто используют Synchronize и не дают чем её имплементировать, молодцы конеш - тоже таких встречал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2020, 20:12 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038163]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
500ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 799ms |

| 0 / 0 |
