Une procédure incluse dans une DLL doit intégrer 8 fichiers CSV (de manière contrôlée) en base de données (BDE).
Pour que l'utilisateur ne pense pas que l'appli est plantée, je me dois de lui indiquer la progression (nombre de fichiers, nombre d'octets par fichier).
Inutile de vous dire que toutes les dispositions pour faire progresser les deux barres sont vaines, le processus est ancré dans sa procédure de mise à jour ne laisse plus Windows gérer ses messages.
J'ai fait une recherche sur les forums, il semble que ce soit le problème de personne : j'ai donc pensé à créer un thread pour accomplir la tâche.
J'utilise C++BUILDER V5 sur un PC 4 coeurs
Là ca se complique : qui dit base de données dit création d'une session propre au thread (le Sessions->OpenSession("sessionthread") achevé sans erreur me retourne un 'Base de données inconnue' dès la première requête (Bdd de l'appli principale + session nouvellement créée). Je n'ai pas trouvé le moyen d'associer la nouvelle session à la Bdd principale.
Plusieurs données créées dans le thread principal (tableau de String + tableau de int ) doivent être utilisées dans le thread créé.
J'ai donc réalisé un lien entre la form principale et le thread par les headers, tout se passe correctement.
La form est créée (je suis en DLL) par :
1 2 3
| TForm1 *form = new TForm1(this):
form->ShowModal();
delete form; // et là c'est la bérézina : manifestement un débordement de pile qui plante l'appli. |
Quelqu'un aurait un tutoriel ou une doc
COMPLETE sur l'utilisation de thread c++Builder utilisant une base de données + passage de paramètres (les tuto Sort, multi Sort etc...ne me sont d'aucune utilité)
Merci d'avance au MasterThread qui me répondra
Partager