Alex7wrt

Пользователи
  • Публикации

    334
  • Зарегистрирован

  • Посещение

  • Days Won

    2

Alex7wrt last won the day on 27 февраля 2016

Alex7wrt had the most liked content!

О Alex7wrt

  • Звание
    Продвинутый пользователь

Информация

  • Пол
    Мужчина

Посетители профиля

519 просмотров профиля
  1. Спасибо, но возможно это подходит для "одноразовых задач" - когда нужен один проход потоков, потому что иначе приходится каждый раз после отрисовки создавать потоки заново, из-за этого теряется производительность (я писал об этом в первом посте). Было бы лучше, если всю конструкцию можно было поместить в бесконечный цикл, не прерывая потоков.
  2. Возможно в файле манифеста нужно дописать android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
  3. Создается отдельный поток на какую-то часть от общего числа шариков (количество шариков на каждый поток зависит от их количества и количества потоков). В потоке просчитывается изменение координат и скоростей этого массива шариков на 1 итерацию. После просчета всех потоков должен обновиться экран - естественно, в главном потоке. Вопрос как синхронизировать завершение всех потоков с отрисовкой на экране и при этом получить как можно более высокую производительность.
  4. При измерении частоты кадров (отрисовок холста) в событии OnPaint под Android значение не поднимается выше 60 Гц. При этом под Windows такого ограничения нет. Как это можно исправить? Поскольку это мешает оценить реальную картину быстродествия на устройстве.
  5. Добрый день. Не знаю как правильно синхронизировать потоки. Выполняю математические расчеты. Нужно использовать все ядра процессора и после каждого полного прохода выводить результат на экран, после вывода на экран нужно сразу же начинать новый проход и тд. И при этом нужна максимальная производительность. Процедура распределения задачи на разное количество ядер есть. Но не получается совместить синхронизацию с максимальной производительностью. Сама задача - расчёт столкновений шариков в двумерном пространстве. Цель - макс количество кадров в секунду. Делал разными способами, но каждый раз получается не то, что нужно. Если в качестве синхронизации использовать TThread.OnTerminate, где по счетчику определять все ли потоки завершены и потом уже выводить на экран и создавать потоки заново, то получается очень медленно. 2 ядра дают 10% преимущества перед 1 ядром. Наверно потому что много времени уходит на создание потоков и ожидание выполнения всех. Если каждый поток выполнять бесконечным циклом, не давая ему завершиться и в конце итерации осуществлять вывод на экран, то получается максимально быстро но вместо одного вывода на экран число выводов равно числу потоков и невозможно правильно отследить частоту кадров. И получается рассинхронизация потоков. И много промежуточных вариантов пробовал тоже. Как правильно нужно организовать взаимодействия потоков, чтобы была максимальная производительность?
  6. В своей старой программе я использовал потоки TThread для параллельного вычисления с помощью всех ядер процессора. Но у меня возникали проблемы с синхронизацией после каждого завершенного потока. Узнал, что существует модуль System.Threading, в котором есть всякие TTask иTParallel. И, что меня заинтересовало, TTask.WaitForAll. Вот только не пойму как это все использовать, В частности, мне нужен вывод на экран информации каждый раз после того, как все потоки завершат свою работу. Например, есть 4-х ядерный процессор. Я создаю 4 потока и каждому из них подсовываю определенную процедуру для выполнения. Мне нужно, чтобы после того, как все потоки закончили вычисления, вывелась информация на экран и они снова начали работать над своими процедурами. И так, пока я не остановлю. Есть метод TTask.WaitForAll, который дожидается выполнения всех потоков TTask, но если после вызова этого метода вставить строку вывода на экран, а затем сразу же снова запустить потоки, то ничего не выводится, программа подвисает, но при этом загрузка процессора ни 100% как должна быть, а где-то 30%. И для чего нужен TParallel, iFuture? Будьте добры, подскажите, кто в теме.
  7. Если отключить Splash Image, то при запуске приложения фон всегда черного цвета. Можно ли поменять этот цвет на другой?
  8. А можно поподробнее?
  9. Добрый день. Есть ли у кого-нибудь опыт работы с FaceBook под FireMonkey. Нужно сделать так, чтобы по нажатию кнопки "Войти через FaceBook" в приложении можно было получить имя и фото аккаунта. Я так понимаю, это при условии, что приложение FB установлено. Ну а если его нет, то программа предложила бы ввести логин и пароль от FB и получить те же имя и аватарку. (Последнее реализовано в Вайбере для получения фотки из ВК). Можно ли такое сделать?
  10. Вариант с TfgApplicationEvents.OnOrientationChanged тоже не подходит. Следующий код procedure TForm1.fgApplicationEvents1OrientationChanged(const AOrientation: TScreenOrientation); begin if AOrientation = TScreenOrientation.Portrait then text7.Text:='portrait' else if AOrientation = TScreenOrientation.Landscape then text7.Text:='landscape'; end; Всегда возвращает 'portrait' при вращении устройства. По-видимому остается только вариант с OnResize и сравнением ширины и высоты.
  11. Спасибо, с OnResize уже начал делать, нужно попробовать с TfgApplicationEvents.OnDeviceOrientationChanged Наверно, вы имели ввиду TfgApplicationEvents.OnOrientationChanged?
  12. Спасибо, но тот код не работает, когда всегда только портретная ориентация. Вы и сами там написали, что он работает при повороте приложения, но не устройства. А мне нужно чтобы приложение не поворачивалось, но я знал, в какой ориентации сейчас сам телефон.
  13. Добрый день. В приложении использую только портретную ориентацию экрана. Application.FormFactor.Orientations := [TFormOrientation.Portrait]; Необходимо определить, что устройство повернулось в альбомный вид (при этом интерфейс все время отображается в портретном виде) Как такое реализовать? Есть ли такие функции в FMX или обязательно нужно использовать датчики?
  14. Друзья, существует ли альтернатива стандартному медиаплееру для FireMonkey? С большим количеством функций, например предпросмотр, и возможностью выводить элементы интерфейса поверх плеера? Прежде всего интересует Windows, а дальше по убывающей - Mac OS и мобильные платформы.