Главная » C++, C++ Builder » Дизайн приложения с потоками в CBuilder

0

Самая сложная часть работы  с потоками — определение того, действительно ли они нужны  в вашем приложении. Нет никаких четких правил, когда их стоит использовать, но некоторые приложения по самой своей сути хорошо подходят под потоковый дизайн.

Первый случай, когда стоит использовать потоки, — фоновая обработка. Проверка последовательных или параллельных портов, отслеживание файловой активности,  работа  с журналом событий во время простоя — вещи, которые будут замечательно работать в  виде потока. Если действия ни от чего не зависят, как, например, обработка времени простоя, то вы

часто можете просто «завернуть» код цикла обработки времени простоя в поток.

Еще один подходящий для потоков случай — когда вам нужно несколько действий, работающих дискретно, совершать одновременно, например стартовый код вашего приложения или код инициализации, который должен выполняться перед тем, как пользователь может начать что-либо делать. Обычно ваш подход заключается в запуске графического  интерфейса (формы) пользователя, в то время как фоновый поток настраивает систему на работу с данной формой. Загрузка информации о проекте, пока форма отображается, а также разбор данных о классе в броузере объектов (как это происходит в Visual C++)  являются  хорошими  примерами  данного типа применений потоков.

Последний пример приложения, использующего потоки, применяется тогда, когда  вам  нужно, чтобы пользователь запустил некий процесс, а вы бы отображали результаты, в то же  время позволяя пользователю делать какую-то другую работу. Представьте, например, что пользователю нужно соединиться с удаленной базой данных и получить набор записей  из  этой  базы. Пользователь мог бы задать критерий для поиска и затем запросить все записи, подходящие под него. Во время поиска, как и в нашем примере поиска файлов, вы могли бы позволить пользователю детально просматривать записи, даже в процессе их получения с сервера. Это позволит вашему приложению и пользователю совершать параллельную работу.

Преимуществ у потоков много. Вы можете сделать так, что каждая независимая часть кода будет совершать свою работу, совсем не беспокоясь о других частях. Например, код, управляющей визуальными элементами, может спокойно считать, что у него будут нужные данные в  тот момент, когда они потребуются (так называемая система «just-in-time data retrieval», получение данных вовремя), вместо ожидания процесса  загрузки  данных.  Потоки  являются  хорошим способом отделять код, отвечающий за получение данных, который сильно привязан к конкретному приложению, от кода графического интерфейса, управляющего отображением и манипулированием данными. В этом отношении потоки хорошо вписываются в объектно- ориентированный подход.

Когда использовать потоки не стоит? Во многих приложения х использование потоков чрезмерно их усложняет и вдобавок сильно затормаживает. Потоки, разумеется, нагружают систему; даже сама операционная система Windows работает немного медленнее. Чем больше у вас потоков, тем больше загрузка системы, ведь как минимум нужно помнить о каждом потоке и определять время, когда пора его запускать.

Перед тем как использовать потоки, задайте себе несколько вопросов:

·    Взаимодействует ли этот код с чем-нибудь в системе? Если данный код часто обращается к остальным частям вашего приложения, то это весьма плохая кандидатура на использование  в потоке.

·    Нужен ли этому коду доступ к данным, находящимся вне его? Если это так, то на роль потока код явно не годится. Потокам нужен полный контроль над данными, с которыми они работают. В то время как нормально иметь поток, загружающий  записи в таблицу на экране, поток, производящий поиск по записям, введенным пользователем, явно не является хорошей идеей. Конечно, у вас может быть своя точка зрения на этот счет.

·    Действительно ли мне нужны потоки? Не использую ли я потоки только для того, чтобы все думали, что я классный программист? Многие программисты тщательно используют  все новые технологии, хотя зачастую они далеко не являются лучшим решением данной конкретной проблемы.

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

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

  • Комментарии