Bonjour,
j'ai encore un problème et celui la me pourri la vie!
donc, pour situer le truc, je cherche a faire une dll qui intègere un serveur TAO. Quand je lance l'initialisation du serveur, j'ai un blocage de l'init sur le orb->run();
Résultat, le reste de mon appli est figée....
j'ai bien tenté de threader ce bloc, mais soit je ne fais pas ce thread correctement (c'est fort possible d'ailleurs), soit je passe à coté d'une option ou d'une implémentation spécifique du serveur.
Dans le cas ou je thread le serveur, j'ai une quasi occupation à 100%... allez comprendre :'(
le code de mon serveur :
le init est appelé ailleurs dans le code par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #include "serveur.h" #include "tao/debug.h" #include "ace/streams.h" #include "ace/Get_Opt.h" #include "ace/Read_Buffer.h" #include "ace/OS.h" #include "ace/SString.h" int init(int argc, char* argv[]){ try { // First initialize the ORB, that will remove some arguments... CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "" ); CORBA::Object_var poa_object = orb->resolve_initial_references ("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow (poa_object.in ()); PortableServer::POAManager_var poa_manager = poa->the_POAManager (); poa_manager->activate (); // Create the servant Agent_i stock_factory_i; // Activate it to obtain the object reference Agent_var stock_factory = stock_factory_i._this (); // Put the object reference as an IOR string CORBA::String_var ior = orb->object_to_string (stock_factory.in ()); // Print it out! ofstream Sortie; Sortie.open(argv[0]); Sortie << ior.in () << endl; Sortie.close(); cout<<" server avant run"<<endl; orb->run (); // Destroy the POA, waiting until the destruction terminates poa->destroy (1, 1); orb->destroy (); } catch (CORBA::Exception &) { cerr << "CORBA exception raised!" << endl; } return 0; };
a priori, vu le code, ca me semble assez logique que le run soit bloquant (vu le destroy derriere), mais comment faire pour le lancer en background et recupérer la main?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 serveur CS; char * arg[1]; arg[0]="G:/Virtools.IOR"; CS.init(1,arg);
je tourne sous win2k, VC++ ... et TAO
merci de votre aide
Partager