Alex7wrt
Пользователи-
Постов
508 -
Зарегистрирован
-
Посещение
-
Победитель дней
31
Весь контент Alex7wrt
-
При измерении частоты кадров (отрисовок холста) в событии OnPaint под Android значение не поднимается выше 60 Гц. При этом под Windows такого ограничения нет. Как это можно исправить? Поскольку это мешает оценить реальную картину быстродествия на устройстве.
-
Как правильно организовать многопоточный алгоритм
Alex7wrt опубликовал вопрос в Потоки и распределенные вычисления
Добрый день. Не знаю как правильно синхронизировать потоки. Выполняю математические расчеты. Нужно использовать все ядра процессора и после каждого полного прохода выводить результат на экран, после вывода на экран нужно сразу же начинать новый проход и тд. И при этом нужна максимальная производительность. Процедура распределения задачи на разное количество ядер есть. Но не получается совместить синхронизацию с максимальной производительностью. Сама задача - расчёт столкновений шариков в двумерном пространстве. Цель - макс количество кадров в секунду. Делал разными способами, но каждый раз получается не то, что нужно. Если в качестве синхронизации использовать TThread.OnTerminate, где по счетчику определять все ли потоки завершены и потом уже выводить на экран и создавать потоки заново, то получается очень медленно. 2 ядра дают 10% преимущества перед 1 ядром. Наверно потому что много времени уходит на создание потоков и ожидание выполнения всех. Если каждый поток выполнять бесконечным циклом, не давая ему завершиться и в конце итерации осуществлять вывод на экран, то получается максимально быстро но вместо одного вывода на экран число выводов равно числу потоков и невозможно правильно отследить частоту кадров. И получается рассинхронизация потоков. И много промежуточных вариантов пробовал тоже. Как правильно нужно организовать взаимодействия потоков, чтобы была максимальная производительность? -
Параллельные вычисления, System.Threading
Alex7wrt опубликовал вопрос в Потоки и распределенные вычисления
В своей старой программе я использовал потоки TThread для параллельного вычисления с помощью всех ядер процессора. Но у меня возникали проблемы с синхронизацией после каждого завершенного потока. Узнал, что существует модуль System.Threading, в котором есть всякие TTask иTParallel. И, что меня заинтересовало, TTask.WaitForAll. Вот только не пойму как это все использовать, В частности, мне нужен вывод на экран информации каждый раз после того, как все потоки завершат свою работу. Например, есть 4-х ядерный процессор. Я создаю 4 потока и каждому из них подсовываю определенную процедуру для выполнения. Мне нужно, чтобы после того, как все потоки закончили вычисления, вывелась информация на экран и они снова начали работать над своими процедурами. И так, пока я не остановлю. Есть метод TTask.WaitForAll, который дожидается выполнения всех потоков TTask, но если после вызова этого метода вставить строку вывода на экран, а затем сразу же снова запустить потоки, то ничего не выводится, программа подвисает, но при этом загрузка процессора ни 100% как должна быть, а где-то 30%. И для чего нужен TParallel, iFuture? Будьте добры, подскажите, кто в теме.- 3 ответа
-
- system.threading
- itask
-
(и ещё 1 )
C тегом:
-
А можно поподробнее?
-
Добрый день. Есть ли у кого-нибудь опыт работы с FaceBook под FireMonkey. Нужно сделать так, чтобы по нажатию кнопки "Войти через FaceBook" в приложении можно было получить имя и фото аккаунта. Я так понимаю, это при условии, что приложение FB установлено. Ну а если его нет, то программа предложила бы ввести логин и пароль от FB и получить те же имя и аватарку. (Последнее реализовано в Вайбере для получения фотки из ВК). Можно ли такое сделать?
-
Вариант с 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 и сравнением ширины и высоты.
-
Спасибо, с OnResize уже начал делать, нужно попробовать с TfgApplicationEvents.OnDeviceOrientationChanged Наверно, вы имели ввиду TfgApplicationEvents.OnOrientationChanged?
-
Спасибо, но тот код не работает, когда всегда только портретная ориентация. Вы и сами там написали, что он работает при повороте приложения, но не устройства. А мне нужно чтобы приложение не поворачивалось, но я знал, в какой ориентации сейчас сам телефон.
-
Добрый день. В приложении использую только портретную ориентацию экрана. Application.FormFactor.Orientations := [TFormOrientation.Portrait]; Необходимо определить, что устройство повернулось в альбомный вид (при этом интерфейс все время отображается в портретном виде) Как такое реализовать? Есть ли такие функции в FMX или обязательно нужно использовать датчики?
-
Друзья, существует ли альтернатива стандартному медиаплееру для FireMonkey? С большим количеством функций, например предпросмотр, и возможностью выводить элементы интерфейса поверх плеера? Прежде всего интересует Windows, а дальше по убывающей - Mac OS и мобильные платформы.
-
Например так: var path: TPathData; .......... Path:=TPathData.Create; Path.Clear; Path.MoveTo(PointF(x[0],y[0])); for i:=1 to N do Path.LineTo(PointF(x[i],y[i])); Path.ClosePath;
-
Да. TNetHTTPClient это визуальный компонент, его можно создать и настроить в DesignTime, а THTTPClient - нет. Функциональность у них практически идентична.
-
1. При расположении на форме одного компонента TDropTarget, у него нет границ. При расположении двух компонентов рядом, появляется пунктирная линия границы этих компонентов. Я понимаю, что это для того, чтобы не перепутать, в какой из компонентов осуществляется перенос, но все-таки мне нужно убрать эту пунктирную линию. Каким образом это можно сделать? 2. Если моя задача - это перенос файлов из проводника в окно программы, обязательно ли нужно использовать TDropTarget для этого или можно обойтись и другими компонентами, например TRectangle?
-
Здравствуйте. Нужно мышкой менять размеры контролов, которые имеют общую границу. Как распространить событие OnMouseMove для одного контрола за его пределы? Чтобы можно было отловить это событие, когда мышь находится на соседнем контроле.
-
Добрый день. Есть ли в FMX кросплатформенный способ изменять время активности приложения, то есть количество секунд бездействия, по истечению которых приложение уйдет в фон? Либо вообще запретить переход приложения в фоновый режим, то есть затемнение и отключение экрана - как это происходит во время просмотра видео или в некоторых играх, например Angry Birds? Интересует Android и iOS.
-
Часто при отрисовке битмапа на холсте используется метод DrawBitmap, где, в частности, в качестве аргумента необходимо указать прямоугольные области источника (SrcRect) и приемника (DestRect). Эти прямоугольники имеют формат записи (Left, Top, Right, Bottom). При указании в качестве SrcRect всего битмапа целиком как здесь на формуме так и в книге Осипова я встречал такую запись: RectF(0,0,ABitmap.Width,ABitmap.Height) Но моя логика подсказывает, что такой битмап должен иметь размеры на 1 пиксель по горизонтали и вертикали больше, чем на самом деле, ведь первый пиксель имеет координаты (0;0), а последний (ABitmap.Width,ABitmap.Height). Что, наверное, приводит к искажениям при отображении битмапа на холсте. Мне думается, что при рисовании целого битмапа следует писать так: RectF(0,0,ABitmap.Width-1,ABitmap.Height-1) Прав ли я или не прав? Если нет, то почему?
-
1. Rad Studio 10.1 Berlin 2. Перед началом плавного перетекания появляется второй скриншот, почти сразу же исчезает и после этого начинается плавное перетекание
-
Apple прекратила поддержку сервиса iAD. Значит ли это, что компонент TBannerAd под iOS теперь бесполезен? Или его как-то можно использовать?
-
Добрый день. Имеется приложение, которое реализовано в портретной и альбомной ориентации. При повороте экрана срабатывает событие TForm.OnResize, в котором производятся изменения размеров и положения элементов. В Андроиде при повороте все происходит плавно, а в iOS на долю секунды мигает экран с изменённым положением контролов и только потом перерисовывается. Почему так происходит и как это можно исправить?
-
Спасибо за наводку. Может подскажете пару ссылок на случай "сделай сам"? Может быть есть алгоритмы как перекодировать массив пикселей в кадр формата h264? Или что-то типа того? Там наверное не все так просто и следующий кадр зависит от предыдущего