имхо, с firemonkey неплохо работает такая схема:
1. создать две потокозащищенные очереди (структуры), на си для этого подходит std::deque, в fmx можно TList. Защита стандартно TCriticalSection;
2. создать несколько потоков, с помощью TEvent указать им ссылки на очереди и критические секции;
3. в потоках:
3.1 TCriticalSection::Enter лочим очередь задач,
3.2 забираем крайнюю задачу
3.3 TCriticalSection::Leave отпускаем очередь задач
3.4 вычисления
3.5 по аналогии с очередью задач лочим очередь результатов, выкладываем результаты, отпускаем
3.6 повтор с пункта 3.1
4. в основном потоке в очереди (тоже lock unlock) выкладывать задачи и при наличии результатов отрисовывать имеющимися средствами.
в 4 пункте нужен будет нужен будет какой-нибудь mmtimer.