Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: Igors от Февраль 25, 2020, 12:54



Название: MP + plugins
Отправлено: Igors от Февраль 25, 2020, 12:54
Добрый день

Приложение крутит на экране анимацию кадр за кадром. На каждом кадре вызывается плагин который лезет в (большой) файл, находит там данные текущего кадра, из них создает модель, передает ее хосту, и тот рисует кадр. Все работает, но вот беда - по скорости/fps плохо. Ну оно и понятно, пока файл откроют, прочитают, хосту данные передадут... Подробности: общение с плагином - чисто С API. Превью имеет стандартную опцию "drop frames", напр после кадра 5 следующим может быть кадр 10 (если не успевает).

Ну и как "ускоряться"? Разумеется плагин ни о каком multi-threading никогда не слыхал, глобалок там туча  :'( Хост использует MP, но для др целей, общение с плагином глухо в main thread. В общем пока неясно даже "с какой стороны подлезть". Что посоветуете ?

Спасибо


Название: Re: MP + plugins
Отправлено: Igors от Февраль 26, 2020, 11:13
Ну как всегда :) Ладно, я рассматривал такие возможности:

1) Делать чисто "от хоста" т.е. хост зовет плагин для кадров N (текущий), N + 1, N + 2 и.т.д. Быстро убедился что это нереально т.к. это случай общий, требуется синхронизация ВСЕХ данных для каждого кадра. Ожидаемо/нормально, "слишком гордый/концептуальный" план редко бывает реальным. Придется удовлетвориться оптимизацией конкретного плагина, его данные от других не зависят.

2) Думал вообще распаковать все кадры во временный файл, а потом грузить данные "блоками" (API это позволяет, в хост подаются POD структуры без адресов). Тогда вроде и "разпоточивать" ничего не надо. Но вероятно получу проблемы с диском. Скромная свинка (аттач) - исходный файл уже 300 метров (кадров прилично), а распакованный даже "на глазок" раз в 5 больше.

Вообще то обстоятельство что пропуск кадров (drop frames) может случиться (и часто) и все пыхтение с подгрузкой "с запасом" окажется в минус - капитально охлаждает энтузиазм