Многопоточность физической сцены Qt

У меня есть QGraphicsScene с примерно 1000 QGraphicsItems, которые на самом деле являются физическими элементами. В каждом кадре они продвигаются вперед, проверяют наличие коллизий и, среди прочего, разрешают эти коллизии. Я бы очень хотел, чтобы физика была многопоточной.

Насколько я понимаю, классы QGraphics не являются потокобезопасными. Это означает, что их можно вызывать только из основного потока. Вынуждает ли это меня отправлять окончательные свойства элемента (x, y, вращение) каждого кадра в основной поток с использованием механизма сигнала/слота, а затем использовать метод основного потока для фактического обновления QGraphicsItems? Или есть более простой способ сделать это?

Далее следует только гипотеза: могу ли я использовать QtConcurrent для запуска метода в моем списке QGraphicsItems? Если я использую QMutex в моем методе рисования QGraphicsItem и QMutex в моем физическом методе (который изменит свойства моего QGraphicsItem), будет ли это гарантировать, что только один поток читает/записывает каждый QGraphicsItem в любой момент времени?

9
задан Joel 6 April 2012 в 15:43
поделиться