Поиск:

Ответ в темуСоздание новой темы Создание опроса
> необходимость использования потоков, нужны ли потоки 
:(
    Опции темы
MikhaelKreuz
Дата 10.9.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.9.2007

Репутация: нет
Всего: нет



Здравствуйте.Тему "завершение зацикленного потока" я закрыл,т.к. понял что не в ту степь лезу.
Я попробую изложить свою задачу.А Вас попрошу подсказать мне есть ли необходимость использовать в ней потоки и какой можно использовать альтернативный вариант.

Мне необходимо создать программу которая будет работать с внешним устройством.А точнее обмениваться данными с устройством по COM порту.Обмен этот описан неким стандартом.Мне просто надо воспроизвести его.Я спрашиваю - устройство отвечает.
Сначала устанавливаем связь.Потом начинаем спрашивать.
Я сделал так.
Разбил запросы на группы по характеру и для каждой группы создал поток(классами).Так же сделал поток для установления связи с устройством.

Так вот.При запуске начинает работать поток установления связи.Когда связь есть,этот поток в зависимости от желаемой группы запросов(т.е выбираем вкладку одну - запрашиваем одни данные,другую - другие и т.д.) запускает определенный поток и уничтожает себя сам.Новый поток начинает прокручивать запросы.Прокуручивать запросы набо постоянно чтоб не потерять связь.При выборе другой вкладки,текущий поток запускает новый поток и убивает себя сам.

Каждая группа очень большая запросов по 20.А есле вместе все группы то около 200.Если это всё прокручивать  в главном потоке формы,то пипец.А ещё надож выводитть на форму то что отвечает устройство,этож ваще...

Короче,мне подсказали сделать потоками.Я начал разбираться в них,оказалось не так то просто.То что я на данный момент уже сделал описанным выше способом,работает нормально,только  возникают косяки.

Подскажите пути решения задачи,пожалуйста.
PM MAIL   Вверх
_hunter
Дата 10.9.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



возникает резанный вопрос: а нафига такую кучу потоков городить? -- в основной функции (единственного рабочего потока) в зависимости от текущего состояния вызываем соответствующую состоянию функцию. и все...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
MikhaelKreuz
Дата 10.9.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.9.2007

Репутация: нет
Всего: нет



Я так делал.Я ж первым делом об этом же и подумал.Результат 82% ЦП.Но всё прекрасно работает.
Я так понимаю,единчственная пока что причина использования хоть одного потока - это разгрузить форму иначе она мертвая висеть будеть.Правильно ли я думаю?

PM MAIL   Вверх
_hunter
Дата 10.9.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



Цитата(MikhaelKreuz @  10.9.2007,  15:00 Найти цитируемый пост)
Я ж первым делом об этом же и подумал.Результат 82% ЦП.

ну так приоритет потоку понизь. или Sleep'ов добавь...

Цитата(MikhaelKreuz @  10.9.2007,  15:00 Найти цитируемый пост)
Я так понимаю,единчственная пока что причина использования хоть одного потока - это разгрузить форму иначе она мертвая висеть будеть.

таки да.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
HappyLife
Дата 10.9.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



MikhaelKreuz, Чтобы форма мертвая не висела. нужно переодически вызывать Application->ProcessMessages();
PM MAIL   Вверх
_hunter
Дата 10.9.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



это костыли. причем не особо хорошие...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
MikhaelKreuz
Дата 11.9.2007, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.9.2007

Репутация: нет
Всего: нет



на счёт Application->ProcessMessages(); 
Я добавлял.И когда без потоков делал и когда с всё в одном потоке делал.Действительно похоже на костыли.
Мож я канечна не до конца понимаю,но блин пробовал... smile

Добавлено через 2 минуты и 36 секунд
Цитата

ну так приоритет потоку понизь. или Sleep'ов добавь...

Приоритет понижал - связь с устройством начинет чаще слетать.А на ЦП не особо отразилось 60 - тож не хорошо.И Sleeepов там достаточно. 
PM MAIL   Вверх
_hunter
Дата 11.9.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



Цитата(MikhaelKreuz @  11.9.2007,  06:40 Найти цитируемый пост)
И Sleeepов там достаточно.  

если поток сильно жрет проц -- явно не достаточно...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
HappyLife
Дата 11.9.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



MikhaelKreuz, Сделай два потока, один для визуализации формы, другой, для выполнения работы с портом.
PM MAIL   Вверх
ksili
Дата 11.9.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Цитата(_hunter @  10.9.2007,  23:21 Найти цитируемый пост)
это костыли. причем не особо хорошие... 

Говоришь, костыли... А сам чего предлагаешь? Sleep'ы, приоритет понизить...


MikhaelKreuz, делай
Цитата(HappyLife @  11.9.2007,  16:13 Найти цитируемый пост)
два потока, один для визуализации формы, другой, для выполнения работы с портом

я так и делаю, нормально работает с многими портами одновременно


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
_hunter
Дата 11.9.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



я предлагаю простой способ понизить нагрузку на процессор (это не говоря о том, что ее не особо нужно понижать).

ProcessMessages же используют если нет желания заморачиваться с потоками. + форма перестанет "умирать" но всеравно будет дергаться на каких-нить функция чтения/записи в порт...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ksili
Дата 11.9.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



В принципе, без Sleep'ов в любом случае не обойтись, даже при использовании потоков. Ибо не всегда устройство мгновенно может вернуть ответ на запрос


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
MikhaelKreuz
Дата 11.9.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.9.2007

Репутация: нет
Всего: нет



ksili - в точку.Sleepы я для этого и использую.Устройству нужно время для ответа.А про один поток рабочий,другой для визуализации, я думал.Это ж логичнее так сделать.Но меня сразу спугнуло то что в нём будет охеренно здоровое тело(Execute и др. функции),т.к. запросов куча,каждый нада обработать ещё.По этому даже пробовать не стал....попробую.
А что ты имеешь ввиду под потоком для визуализации формы?Её собственный поток,который автоматом создается при создании процесса?Или ещё дополнительный?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0862 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.