Я обнаружил, что большинство API баз данных являются поточно-ориентированными только на уровне соединения. Firebird может отличаться, но использование InterBase несколько (8+) лет назад не было поточно-ориентированным. Обновление: Я подтвердил, что Firebird безопасен только для потоков на уровне соединения.
Это означает, что обычно вам нужно избегать использования одного соединения из более чем одного потока одновременно. Выполнение запроса к данному соединению применяется.
Избегайте использования двух запросов в разных потоках для одного и того же соединения.
Однако, сказав, что, если у вас есть два соединения, у вас может быть запущено два запроса одновременно.
Похоже, природа вашего вопроса заключается в том, как безопасно передавать данные в поток, и, хотя вам особенно нужна база данных, это применимо общим способом, независимо от того, что содержится в потоке.
Самый простой способ передачи данных - это создание, вы можете приостановить поток, установить различные свойства для вашего потомка TThread
. Затем возобновите выполнение потока.
Фактический код, выполняющий работу в потоке, должен вызываться из метода Execute()
.
Если вам нужно обмениваться данными между потоками, вы должны заключить их в одну из различных структур, позволяющих синхронизацию, таких как критический раздел, мьютекс или семафор.
В Delphi есть библиотечные оболочки для каждого из них в модуле SyncObjs.pas.