Перейти к содержанию
Fire Monkey от А до Я
  • 0

Распараллеливание процессов


kidrock

Вопрос

Всем привет.

 

Я новичок в Делфи и вообще новичок в программировании, поэтому возможно многим гуру покажутся мои вопросы глупыми, но всё таки. Написал что то типа Rest-сервера со статьями и картинками для мобильного приложения. Сделал мобильный клиент на делфи, смог записывать данные с сервера в базу данных sqllite и даже научился записывать картинки на SD-карту))). Приложение почти готово. Но вот возникла проблема. Можно ли как то распараллелить процессы. Например, если интернет совсем слабый (на мобилке "Е", например), то время ожидания загрузки новых статей катострофически долгое и самое важное, что в этот момент приложение "парализуется". Ведь наверняка же есть какой то метод. Среда разработки XE7

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Распараллеливание - это распределение вычислений между несколькими процессорами (или несколькими ядрами одного процессора). Есть подозрение, что вы неверно выбрали термин. Про распараллеливание можете почитать тут (Новый модуль System.Threading) или посмотреть тут. Вы же (исходя из сути вопроса) скорее всего имеете ввиду многопоточность. Если так, почитайте в интернете про класс TThread, статей и примеров великое множество.

Ссылка на комментарий
  • 0

Всем доброго дня!

Конечно речь стоит о многопоточности (как весьма правильно описал estra). И тут много факторов.

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

Но для того, чтобы не тормозило GUI (интерфейс программы) - однозначно нужно многопоточность, не забывая при этом о синхронизации (если требуется отображать процессы работы с сетью, пока идет загрузка Ваших "статей"/"новостей" или что-либо другое).

 

С Satуllite я частично не соглашусь. И вот по какой причине. Рискуя остаться в меньшинстве и быть не понятым, скажу следующее.

Delphi - "сыровата", но это единственный инструмент для простой и удобной разработки, который имеет ряд неоспоримых преимуществ разработки кроссплатформенных приложений.

Его "сырость" заключается в недоработках и ошибках библиотек самой FMX. Однако, имея опыт работы с Firemonkey со дня их появления, и будучи не имеющим отношения к Embarcadero и FMX, могу сказать что они движутся в верном направлении. И по сравнению с другими у них есть большая фора.

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

И не стоит спорить на тему "самого удобного и простого" IDE и мощнейшего языка программирования. Будь иначе - Вас бы тут не было...

 

P.S. А FMX будет развиваться (я надеюсь не только самой Embarcadero))) всем сообществом. Будут появляться решения, библиотеки и т.д.

Все новое всегда кажется абсурдом и ненужным. По прошествии времени начинаешь сожалеть, что не занялся этим раньше...

Ссылка на комментарий
  • 0

С Satуllite я частично не соглашусь. И вот по какой причине. Рискуя остаться в меньшинстве и быть не понятым, скажу следующее.

Delphi - "сыровата", но это единственный инструмент для простой и удобной разработки, который имеет ряд неоспоримых преимуществ разработки кроссплатформенных приложений.

 

Про удобность кроссоплатфоременных приложений не спорю. Но оптимизация отнюдь не самая приятная: Android приложение весит - 8 мб. Windows - 20 мб. (300 строк кода). К тому же, нету той плавности, где всё работает прекрасно. Однозначно, Embarcadero стремится улучшить свой продукт, но нету того функционала, которого хочешь ожидать от них. Всему своё время. 

Ссылка на комментарий
  • 0

Распараллеливание - это распределение вычислений между несколькими процессорами (или несколькими ядрами одного процессора). Есть подозрение, что вы неверно выбрали термин. Про распараллеливание можете почитать тут (Новый модуль System.Threading) или посмотреть тут. Вы же (исходя из сути вопроса) скорее всего имеете ввиду многопоточность. Если так, почитайте в интернете про класс TThread, статей и примеров великое множество.

Спасибо большое, друзья. Теперь у меня всё более менее красиво. Пользователь может читать новости, а в это время закачиваются другие. 

Ссылка на комментарий
  • 0

Друзья, всё таки нуждаюсь в вашей поддержке. Никак не могу разобраться до конца я с этими потоками. Вроде бы там где не нужно менять ничего в компонентах вроде бы разобрался(например, распарсивание JSON и закачка в БД), а вот в тех местах где нужно, нажав на кнопку обновить Listview1, ну никак не получается.

Идея простая, юзер нажимает на кнопку обновления, перед ним выезжает табличка "Loading...please wait", происходит докачка статей и Listview обновляется. По одиночке всё работает. Собрать всё это и сделать красиво с фидбэком, ну никак не получается.

Ссылка на комментарий
  • 0
fgActivityDialog.Show; // показываем Activity
Request.ExecuteAsynch(
  procedure 
  begin
     if not Request.Response.Content.IsEmpty then
     begin
        lv.beginupdate;
           // добавляем итемы
        lv.endupdate;

        fgActivityDialog.Hide;
     end
  end
);

Не ?

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...