|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Jean-Marie Développeur informatique Inscription : février 2012 Messages : 5 ![]() |
Bonjour,
Je suis en train de migrer une application de D2007 / UIB 2.1 / FB 2.1 vers DXE2 / UIB 2.5 / FB 2.5.1 Lors d'appel multiThread UIB je constate assez rapidement des exceptions suite aux appels UIB et dans la couche UIB elle même à divers endroits. Pour m'affranchir des problèmes applicatifs liés à cette migration, j'ai testé le petit bout de code livré avec UIB (ThreadedQueries dans le dossier uib25\examples\UIB\Component\ThreadedQueries). Je constate les mêmes problèmes que dans mon appli ! Idem avec FB 2.1 Idem avec base locale ou non. Voici ce bout de code auquel j'ai ajouté quelques traces. rien de bien transcendant ! Code :
Cela peut-il venir de la compatibilité UIB25 avec DXE2 ? De mon installation des composants UIB 2.5 ? (j'ai juste modifié le uib.inc pour choisir la version FB) Avez vous la possibilité de tester ce petit prog dans un environement DXE2/UIB25 (adaptez juste les parties rouges) ? Merci de votre aide , je boucle la dessus depuis plusieurs jours ! jml. |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
vous utilisez bien la dernière version des uib ?
c'est à dire un check out du dépot subversion ?
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Jean-Marie Développeur informatique Inscription : février 2012 Messages : 5 ![]() |
Bonjour,
Cette version date du 11/10/2010, c'est la plus récente que j'ai trouvée. ici: http://sourceforge.net/projects/uib/files/ à cette date DXE2 n'était pas sorti il me semble ... J'ai installé cettte UIB 2.5 sur D2007 et j'ai des problèmes similaires avec ceux sur DXE2 (violations d'accès principalement, rarement les mêmes). Dans UIB 2.1 il y avait une directive UIBTHREADSAFE, elle semble avoir disparu dans la version 2.5. Je tente maintenant de réinstaller UIB 2.1 sur DXE2. Merci pour ton aide. Jml |
|
|
00
|
|
|
#4 | |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 3 627 ![]() |
Citation:
Voir ici
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius |
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Jean-Marie Développeur informatique Inscription : février 2012 Messages : 5 ![]() |
Bonjour,
J'ai suivi vos conseils. Purge de tous les paquets UIB installés dans delphi. Purge de tous les fichiers UIB téléchargés précédement Installation de Tortoise Check out avec l'adresse https://uib.svn.sourceforge.net/svnroot/uib/trunk Nouveautés visibles dans cette version: Un paquet D16 et FB 3.0 Modif de uib.inc pour mettre {$DEFINE FB21} Installation des Paquets dans DXE2 en Win32 => pas de problème Le programe de test MultiThread ne fonctionne pas mieux, même type d'erreurs ! J'utilise fbclient.dll livrée avec FB 2.1 Je précise que ce programme de test fonctionne très bien avec UIB 2.1 sous D2007 et que même installé sous D2007, UIB 2.5 ne fonctionne plus. J'ai tenté l'instalation de UIB 2.1 sur DXE2 mais cela ne compile évidemment pas. La question que je me pose est : la version 2.5 est-elle bien multi-thread ? N'y aurait-il pas un $DEFINE à mettre quelque part ? PS: je serais vraiment curieux de savoir si ce prog de test fonctionne chez vous en version 2.5 (apparemment la version Delphi importe peu) jml |
|
|
00
|
|
|
#6 | |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 3 627 ![]() |
Citation:
Le mieux (si ce n'est déjà fait) serait peut être d'aller voir sur le forum de prodigy ?
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius |
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Jean-Marie Développeur informatique Inscription : février 2012 Messages : 5 ![]() |
Bonjour,
Toujours aucune solution ... J'envisage les voies suivantes : * Tenter de porter UIB 2.1 sur DXE2 * Reporter le portage de mon application sur DXE2 en gardant un compatibilité des sources D2007/DXE2 (en attendant un UIB 2.6 ...) * Envisager d'autres solutions comme FibPlus et consorts J'ai expliqué mon problème sur le forum Progdigy, on verra bien. J'ai un peu de mal à imaginer être le seul à être tombé la dessus ou alors tout le monde est resté en 2.1 comme toi. Je n'ai pas trouvé de version 2.2, 2.3, 2.4, normal ? JML |
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Jean-Marie Développeur informatique Inscription : février 2012 Messages : 5 ![]() |
Bonjour,
N'ayant aucune réponse ni explication sur ce phénomène, j'ai décidé d'explorer une autre voie. Suite à différents tests, je me suis aperçu que ce n'était pas le fait que les appels UIB se faisaient dans un Thread mais plutôt à cause du parallélisme engendré. J'ai donc entouré tous les appels UIB par des sections critiques. Depuis, plus aucun problème dans le prog. de test. J'ai appliqué cette même méthode dans mon application ce qui m'a permis de retrouver enfin un fonctionnement stable. Ci-dessous le prog. de test modifié. Code :
|
||
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() DEV DELPHIÉtudiant Inscription : février 2012 Messages : 11 ![]() |
Je pense que ceci répond à ton souci :
Multithreading and N-Tiers servers application. You have 2 choices: -Sharing one DB connection with all threads, in this case 2 threads can share the same Database connection or the same Transaction safely without freezing the server. Some examples of server applications are: Web server, CORBA, DCOM, or Delphi ORB provided provided with UIB. For an example of Multithread server try the the sample applications in the "ClentServer" directory. You must set this compiler option: {$DEFINE UIBTHREADSAFE} excepting with Interbase 7 (The library is allready ThreadSafe) -Create one DB Connection per Thread, in this case you should desactivate {$DEFINE UIBTHREADSAFE}, and setting your DB connection to use the remote protocol (excepting with Interbase 7), to have all threads working faster. il faut créer dynamiquement autant de DB Connection que de threads. Comme ça tu aura la tête tranquille |
|
|
00
|
|
|
#10 | |
![]() ![]() Serge GirardDéveloppeur informatique Inscription : janvier 2007 Messages : 3 627 ![]() |
Citation:
Quant au multithread alors là aucune idée
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius |
|
|
|
00
|
|
|
#11 | ||||
|
Invité régulier
![]() DEV DELPHIÉtudiant Inscription : février 2012 Messages : 11 ![]() |
Tu peux te base sur l'exemple multithread fourni avec IBOJECTS.
L’instanciation du module de données se fait dans un SUB-THREAD dans une section critique Alors tu déclare une variable comme suit : Code :
Et puis tu dois créer un module de données par exemple nomé dmthreads comme suit : Code :
dans le module dmthreads tu ajoute TIUBDATABASE, TUIBTRASACTION,.... tu dois essayé. Pour moi ça marche bien avec 150 threads |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com