|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.05.2011, 14:52 | #1 |
Форумчанин
Регистрация: 26.01.2010
Сообщений: 215
|
Быстрый вызов метода формы из другого потока
Суть проблемы такова, есть форма выполняющая роль консоли. Для записи текста используется procedure TConsole.Write(const Text: string);
Внутри более менее оптимизация сделана, хотя если будут предложения как сделать быстрее выслушаю. Ну ладно не в этом проблема... этот метод вызываю из другого потока естественно по всем правилам через Synchronize (без него в вообще ни чего не выводится). Код:
Так вот вопрос: как можно ускорить вызов этого VCL метода? Текст самой процедуры во вложении.
Могу лишь пнуть в нужном направлении (ну или как получится)
|
21.05.2011, 17:53 | #2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
имхо, проще заюзать TStringList, защищенный критической секцией. В него пишется текст. Из любого потока в любое время, без всяких Syncronize(), очень быстро. Потом, посылается событие для TConsole (без ожидания результата). В обработчике этого события (это будет уже главный поток) TConsole неспешно читает текст из TStringList, отображает текст на экране и чистит список. Заодно и таймер не нужен, и текст будет быстрей на форме появляться.
Сейчас вы заставляете TThreadMachine ждать, пока ветка исполнения не переключится на главный поток, пока TConsole не закончит размышлять над переданным ей текстом, пока исполнения не вернётся в дополнительный поток... Смысла в этом практически никакого.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 21.05.2011 в 18:08. |
21.05.2011, 18:44 | #3 | ||||||
Форумчанин
Регистрация: 26.01.2010
Сообщений: 215
|
не много сделал по не правильному вынес из класса всю работу с буфером просто в модуль, в приложении все равно консоль одна, вызываю теперь на прямую.
Цитата:
Цитата:
(хотя меня устроил бы и результат и в 10 раз ниже). Цитата:
Цитата:
Цитата:
Цитата:
В принципе проблема решена, теперь самое узкое место в работе машины это обращение к LPT порту, здесь уже особых ускорений ждать не получится. Железо само по себе медленное.
Могу лишь пнуть в нужном направлении (ну или как получится)
|
||||||
21.05.2011, 20:34 | #4 |
Форумчанин
Регистрация: 26.01.2010
Сообщений: 215
|
насчет стринглиста я ошибался но у него есть одно но он не разбивает строки по символу переводу строки короче не подходит под мою задачу в данном контексте
Могу лишь пнуть в нужном направлении (ну или как получится)
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Доступ из другого потока Invoke | delias | C# (си шарп) | 17 | 06.06.2013 22:33 |
Вызов метода из метода | kuzjma | PHP | 8 | 10.12.2010 02:38 |
Использование метода free после завершения потока | Denager | Общие вопросы Delphi | 4 | 29.08.2008 10:13 |
Быстрый вызов программы с помощью мыши | Патрон | Win Api | 3 | 17.07.2008 15:40 |
Вызов Метода из др. модуля | Mickle | Общие вопросы Delphi | 2 | 10.05.2007 23:41 |