heleo |
---|
Но к сожалению такие обертки усложняют использование базового функционала QSqlQuery, по факту нужно написать аналог bind и bound. |
Вовсе нет.
Можно и без врапперов...
У тебя уже есть фоновая работа с БД? Как она организована?
Рабочий поток посылает в фоновый поток коннекта сообщение с sql запросом. Фоновый поток этот запрос отдает интерфейсному драйверу который и работает напрямую с СУБД. Дожидается ответа от этого интерфейсного драйвера и кидает рабочему потоку сигнал "готово". Потом по отдельному запросу отдает рабочему потоку резалтсет.
Так?
Теперь тебе достаточно в этот фоновый поток коннекта добавить индексированную очередь запросов. Тогда множество рабочих потоков смогут кидать запросы и получать в ответ индексы. Теперь объект работающий с СУБД может по очереди брать запросы из очереди, отправлять их в СУБД, а получив ответ ... Ну дальше уже варианты:
- кидать сигнал "готово" именно тому потоку который послал запрос (тогда при постановке запроса в очередь надо запоминать кто его послал).
- кидать широковещательный сигнал о готовности с добавлением в сигнал индекса. И рабочие потоки будут смотреть: мой индекс или не мой? Если мой - запрашивать резалтсет.