1. Возможно ли что при столь частом вызове функции данные в векторе будут искажены или не полностью записаны? Порядок записей не важен.
Если данные пишутся в одном потоке, то никакого искажения не будет. В разных потоках используйте примитивы синхронизации.
Как отпустить функцию b(result) в свободное плавание? Я сначала думал сделать
thread th(b);
th.detach();
но потом понял что если бы это была обычная программа, а не dll, то th не успел бы доработать до конца, ибо завершилась бы вызывающая функция.
Предполагаю что в dll, также как и в exe, она тоже не успеет доработать до конца.
Почему функция в потоке не успеет доработать до конца? Вы выгружаете dll из процесса?
Можно сделать такую реализацию.
Создается очередь. В первом потоке данные добавляются в очередь. Второй поток считывает данные из очереди и обрабатывает их. Результат работы передается во вторую очередь. Третий поток читает данные из второй очереди и заносит их БД или SharedMemory. Если данных нет, то поток просто ждет новые данные. Действия с очередями в разных потоках должны синхронизироваться через примитивы синхронизации (mutex).