source: Sophya/trunk/SophyaPI/PIext/piacmd.h@ 4058

Last change on this file since 4058 was 3366, checked in by ansari, 18 years ago

Tentative pour regler le probleme de blocage de piapp suite a affichage de la fefenetre de gestion d'objets.

1/ Protection dans NamedObjMgr() pour eviter deadlock de mutex (ds NamedObjMgr::UpdateObjMgrWindow() en particulier)
2/ Introduction de la classe SOpExObj (fichier piacmd.h .cc) pour execution d'operations sur objets, initiees depuis la boucle d'evts, dans un thread separe.

Reza , 30/10/2007

File size: 3.7 KB
RevLine 
[165]1// This may look like C code, but it is really -*- C++ -*-
2// Classe interpreteur de commande pour piapp
3// Reza Aout 97 , Juillet,Aout 98
4// LAL-IN2P3/CNRS
5
6#ifndef PIACMD_H_SEEN
7#define PIACMD_H_SEEN
8
[293]9#include "machdefs.h"
[2463]10#include "commander.h"
[165]11#include <string>
[293]12#include <vector>
[2536]13#include <queue>
[2486]14#include "zthread.h"
[165]15
16#include "dlftypes.h"
17
[293]18// Forward declaration of some classes ...
[165]19class NamedObjMgr;
20class PIStdImgApp;
[1251]21
22class PIAHelpWind; // Fenetre d'aide en ligne
23class CxxExecWind; // Fenetre pour CxxExecutor
24class CxxOptionWind; // Option de CxxExecutor
25
[293]26// ---------------------------------------------------------------------
27// Classe Interpreteur de commande, gestionnaire de module chargeable,
28// et de fonctions dynamiquement linke pour PIStdImgApp
29// Permet de gerer plusieurs Interpreter differents
30// ---------------------------------------------------------------------
[165]31
[330]32
[2486]33class PIACmd : public Commander, public ZThread {
[165]34public:
[2463]35 // static PIACmd* GetInterpreter();
[165]36
[2490]37 PIACmd(PIStdImgApp* app);
[293]38 virtual ~PIACmd();
39
[2486]40 // Thread execution <ZThread>
41 virtual void run();
42 void AddInputLine(string const & line);
43 void StopThread();
44 inline bool isRunning(int& ninp)
45 { ninp = inputlines.size(); return fg_threxe; }
46 // ---- FIN ---- Thread execution <ZThread>
[293]47
[2463]48 void ShowHelpWindow();
49 void ShowCxxOptionWindow();
50 void ShowCxxExecWindow();
[293]51
[2463]52 // inline CmdInterpreter* CurrentInterpreter() { return(curcmdi); }
[293]53
[2465]54 inline CmdExecutor* BaseExecutor() { return(basexec); }
55 inline CmdExecutor* ContExecutor() { return(cntexec); } //_OP_
56 inline PIStdImgApp* GetImgApp() { return(mImgApp); }
[293]57
[330]58// Pour utilisation par PIAHelpWind uniquement
59 virtual void UpdateHelpList(PIAHelpWind* hw, int gid);
60
[2999]61// Acces aux objets transforme en string
62 virtual bool GetVarApp(string const & vn, string & vv);
63
[293]64protected:
[2474]65 virtual int ExecuteCommandLine(string & kw, vector<string> & tokens,
66 string & toks);
67
[2465]68 virtual bool CheckHelpGrp(string& grp, int& gid, string& desc);
69 virtual void InitializeHelpWindowMenu();
[330]70
[2463]71 virtual void SetCurrentPrompt(const char* pr);
72 virtual void ShowMessage(const char * msg, int att);
[2236]73
[165]74 NamedObjMgr* mObjMgr;
75 PIStdImgApp* mImgApp;
76
[2781]77 CmdExecutor* basexec; // base command executor
78 CmdExecutor* graphexec; // graphic command executor
[1224]79 CmdExecutor* fitexec; // Fit command executor
80 CmdExecutor* pawexec; // paw-like command executor
81 CmdExecutor* cxxexec; // on-line c++ compile/execution command executor
[293]82
[1828]83 CmdExecutor *cntexec; // contour executor _OP_
[1920]84 CmdExecutor *flwexec; // flow chart executor _OP_
[1828]85
[293]86// Fenetre d'aide interactive
87 PIAHelpWind* helpwin;
[2465]88 bool helpwin_initdone;
89// Fenetres d'execution interactive de C++ , options correspondantes
[1251]90 CxxExecWind* cxxexwin;
91 CxxOptionWind* cxxoptwin;
[2486]92
[2536]93// Queue des entrees et controle de thread
94 queue<string> inputlines;
[2486]95 bool fg_thrstop;
96 ZMutex mutx_inps;
97 bool fg_threxe;
98
[165]99};
100
[293]101
[3366]102//
103// ---------------------------------------------------------------------
104// Classe d'execution d'operations simples, comme affichage (display)
105// print , del ... issues en particulier de la boucle d'evts
106// (PIStdImgApp, ObjMgrWind , ...)
107// ---------------------------------------------------------------------
[293]108
[3366]109class SOpExObj : public ZThread {
110public:
111 SOpExObj(PIStdImgApp* app);
112 virtual ~SOpExObj();
113
114 // Thread execution <ZThread>
115 virtual void run();
116 void AddOpe(string const & line);
117 void StopThread();
118
119protected:
120 PIStdImgApp* mImgApp;
121 queue<string> inputlines;
122 ZMutex mutx_inps;
123 bool fg_thrstop;
124 bool fg_threxe;
125};
126
127
128
129
[165]130#endif
Note: See TracBrowser for help on using the repository browser.