IDL, code utilisateur, exceptions, threads, enfin plein de trucs...

IDL, code utilisateur, exceptions, threads, enfin plein de trucs... - Divers - Programmation

Marsh Posté le 02-03-2006 à 23:51:59    

Bonsoir les gens  :jap:  
 
Je suis en train d'intégrer du code C++ (MFC, avec des threads, des exceptions, toussa) au logiciel de calcul IDL (tiens au passage j'ai vu personne en parler dans le sujet-à-softs-qui-font-des-calculs).
 
IDL propose un moyen de linker des routines en C++, du moment qu'elle sont déclarées comme il faut dans une DLL à placer dans le répertoire d'IDL.
Ca, je sais faire.
 
Problème : IDL n'aime pas les threads. Suffit de faire le moindre CreateThread() ou équivalent pour que le bazar se retrouve bloqué. Sauf que le code que je veux intégrer à IDL, il est tout plein de threads (et que j'ai pas envie de tout me retaper).
Solution actuelle : La DLL de fonctions IDL ne contient que du code qui vérifie la validité des arguments recus, formate tout ca dans une jolie commande et envoie le tout via sockets à un programme séparé (qui donc lui peut se permettre de balancer des threads comme il veut :o ).
Jusque la, tout baigne.
J'ai fait ce qu'il fallait pour que si une exception C++ arrivait dans le code de la DLL (qui rappellons le se contente de transmettre la demande au processus de calcul), cette erreur soit reportée sous IDL en utilisant le système de gestion d'erreur de IDL.
(un

throw exception("coucou" ) ;

dans le code de la DLL provoque une exception IDL

%coucou

).
Sauf que ca marche que pour les exceptions lancées dans le code de la DLL (qui finalement ne fait pas grand chose).
J'aurais bien voulu qu'IDL puisse récupérer les exceptions lancées dans le code utile (celui qui se trouve, pour ceux qui n'ont pas suivi, dans un processus séparé avec lequel IDL communique via sockets).
Pour cela, je me suis démerdé à faire une magouille avec les sockets : quand le code utile lance une exception, le code de transfert réseau (qui récupère les commandes arrivant depuis IDL et qui lance les calculs demandés) la chope, flingue la connexion, et le code de la DLL (qui s'était connecté et espérait gentilment qu'en face on ne le jetterait pas comme ca) essaie une nouvelle connexion en demandant "mais pourquoi tu m'a jetté". Et la on lui répond la description de l'exception (que l'on avait préalablement mémorisée).
 
Soit.
 
Ca a l'air de fonctionner.
 
Mais c'est lourd.
 
J'en ai marre de me taper masse code réseau, gérer plein de trucs toussa juste parceque je veux :
invoquer une procédure distante et récupérer ou la valeur renvoyée, ou l'exception lancée. Le tout via réseau (ou autre si vous avez quelque chose à proposer)
 
La question (bah ouaip parcequ'il y a une question, sinon j'me (et vous) ferait pas chier à vous raconter tout ca) :
 
Ca existerait pas déja une bibliothèque toute faite qui puisse faire ce que je me casse la tête à faire tout seul ? (sachant que le but c'est pas seulement d'invoquer et de récupérer le résultat du type attendu, je voudrais aussi récupérer les exceptions lancées...)
 
 

Reply

Marsh Posté le 02-03-2006 à 23:51:59   

Reply

Marsh Posté le 02-03-2006 à 23:53:23    

c'est quoi IDL ? Je pensais que ça allait causer corba


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 03-03-2006 à 00:00:01    

J'ai mis un lien dans le premier post ( http://www.rsinc.com/idl/whatsnew.asp ) mais c'est vrai qu'il est pas tres visible (et que surtout c'est de se taper à lire le site).
 
IDL c'est un soft de calcul numérique orienté imagerie. Ca travaille sur des matrices, ca fait des calculs, ca te montre le résultat avec des graphes toussa. Après faut pas trop m'en demander, je fais pas de calculs moi  [:petrus75] .
 
edit : tiens ya un pdf récapitulatif de tout ce que sait faire le bazar http://www.rsinc.com/idl/pdfs/IDL62_FuncSum.pdf

Message cité 1 fois
Message édité par Mackila le 03-03-2006 à 00:02:12
Reply

Marsh Posté le 03-03-2006 à 11:23:03    

Mackila a écrit :

IDL c'est un soft de calcul numérique orienté imagerie.


C'est aussi et surtout un langage de description d'interface des composants logiciels respecté en particulier par Corba.

Reply

Marsh Posté le 03-03-2006 à 15:08:37    

Oui, ca j'en ai une vague idée, mais c'est pas le sujet :o !
 
Le sujet c'est : "Comment vous feriez pour faire un appel de fonction à travers le réseau, gestion des exceptions comprise ?"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed