Exécuter une requête Firebird dans un thread d’arrière-plan et enregistrer le jeu de résultats

Je veux mettre l’exécution d’une requête avec des parameters dans une classe thread-safe dans delphi-2009.

Je navigue dans Google mais je n’ai pas trouvé ce que je voulais.

Merci

J’ai constaté que la plupart des API de firebase database ne sont sécurisées qu’au niveau de la connexion. Firebird peut être différent, mais en utilisant InterBase il y a plusieurs années (8+), il n’était pas compatible avec les threads. Mise à jour: J’ai vérifié que Firebird est seulement thread-safe au niveau de la connexion.

Cela signifie que vous devez généralement éviter d’utiliser une seule connexion à partir de plusieurs threads en même temps. L’exécution d’une requête sur une connexion donnée s’applique. Évitez d’avoir deux requêtes dans des threads différents en cours d’exécution sur la même connexion.

Cependant, si vous avez deux connexions, vous pouvez avoir deux requêtes en même temps.

La nature de votre question semble être la manière de transmettre des données de manière sécurisée à un thread, et bien que votre besoin spécifique soit une firebase database, cela s’applique de manière générique indépendamment de ce qui est contenu dans un thread.

Le moyen le plus simple de transmettre des données est la création, vous pouvez créer le thread suspendu, définir diverses propriétés sur votre descendant TThread . Puis reprenez l’exécution du thread. Votre code réel qui fait le travail dans le thread doit être appelé à partir de la méthode Execute() .

Si vous avez besoin de partager des données entre les threads, vous devez les insérer dans l’une des différentes structures permettant la synchronisation, telles qu’une section critique, un mutex ou un sémaphore.

Delphi a des wrappers de bibliothèque pour chacun de ceux-ci dans l’unité SyncObjs.pas.