Changeset 3318 for code/trunk/src/core/TclThreadManager.h
- Timestamp:
- Jul 19, 2009, 3:05:15 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/core/TclThreadManager.h
r3313 r3318 33 33 34 34 #include <cassert> 35 #include <list>36 35 #include <map> 37 36 #include <string> 38 #include "core/OrxonoxClass.h" 37 38 #include "OrxonoxClass.h" 39 39 40 40 namespace orxonox 41 41 { 42 // Internal struct43 struct TclInterpreterBundle;44 45 42 class _CoreExport TclThreadManager : public OrxonoxClass 46 43 { 47 friend class IRC;48 44 friend class TclBind; 45 friend void tclThread(TclInterpreterBundle* bundle, std::string command); 49 46 50 47 public: 51 48 TclThreadManager(Tcl::interpreter* interpreter); 52 ~TclThreadManager();49 virtual ~TclThreadManager(); 53 50 54 static TclThreadManager& getInstance() { assert( singletonRef_s); return *singletonRef_s; }51 static TclThreadManager& getInstance() { assert(TclThreadManager::singletonPtr_s); return *TclThreadManager::singletonPtr_s; } 55 52 56 static unsigned int create(); 57 static unsigned int createID(unsigned int threadID); 58 static void destroy(unsigned int threadID); 59 static void execute(unsigned int threadID, const std::string& command); 60 static std::string query(unsigned int threadID, const std::string& command); 61 static void status(); 62 static void dump(unsigned int threadID); 63 static void flush(unsigned int threadID); 53 static unsigned int create(); 54 static Tcl::interpreter* createWithId(unsigned int id); 55 static void destroy(unsigned int id); 56 static void execute(unsigned int target_id, const std::string& command); 57 static std::string query(unsigned int target_id, const std::string& command); 64 58 65 59 void error(const std::string& error); … … 71 65 72 66 private: 73 TclThreadManager(const TclThreadManager& other); 67 static void tcl_execute(const Tcl::object& args); 68 static void tcl_crossexecute(int target_id, const Tcl::object& args); 69 static std::string tcl_query(int source_id, const Tcl::object& args); 70 static std::string tcl_crossquery(int source_id, int target_id, const Tcl::object& args); 71 static bool tcl_running(int id); 74 72 75 static void tcl_execute(Tcl::object const &args); 76 static std::string tcl_query(int querierID, Tcl::object const &args); 77 static std::string tcl_crossquery(int querierID, int threadID, Tcl::object const &args); 78 static bool tcl_running(int threadID); 73 void _execute(unsigned int target_id, const std::string& command); 74 std::string _query(unsigned int source_id, unsigned int target_id, const std::string& command, bool bUseCommandExecutor = false); 79 75 80 Tcl::interpreter* createNewTclInterpreter(const std::string& threadID); 81 Tcl::interpreter* getTclInterpreter(unsigned int threadID); 82 TclInterpreterBundle* getInterpreterBundle(unsigned int threadID); 76 TclInterpreterBundle* getInterpreterBundle(unsigned int id); 83 77 std::string dumpList(const std::list<unsigned int>& list); 84 78 85 void pushCommandToQueue(const std::string& command); 86 void forceCommandToFrontOfQueue(const std::string& command); 87 std::string popCommandFromQueue(); 88 bool queueIsEmpty(); 79 std::string eval(TclInterpreterBundle* bundle, const std::string& command); 89 80 90 void pushCommandToQueue(unsigned int threadID, const std::string& command); 91 std::string popCommandFromQueue(unsigned int threadID); 92 bool queueIsEmpty(unsigned int threadID); 81 static TclThreadManager* singletonPtr_s; ///< Singleton pointer 93 82 94 bool updateQueriersList(TclInterpreterBundle* querier, TclInterpreterBundle* target); 95 96 std::string evalQuery(unsigned int querierID, const std::string& command); 97 std::string evalQuery(unsigned int querierID, unsigned int threadID, const std::string& command); 98 99 unsigned int threadCounter_; 100 TclInterpreterBundle* orxonoxInterpreterBundle_; 101 std::map<unsigned int, TclInterpreterBundle*> interpreterBundles_; 102 103 static TclThreadManager* singletonRef_s; 83 unsigned int numInterpreterBundles_; ///< Number of created Tcl-interpreters (only used for auto-numbered interpreters, not affected by @ref createWithId) 84 std::map<unsigned int, TclInterpreterBundle*> interpreterBundles_; ///< A map containing all Tcl-interpreters 85 boost::shared_mutex* interpreterBundlesMutex_; ///< A mutex used to synchronize threads when accessing @ref interpreterBundles_ 86 TclThreadList<std::string>* messageQueue_; ///< A queue to pass messages from Tcl-threads to the main thread 87 boost::mutex* mainInterpreterMutex_; ///< A mutex to synchronize queries to the main interpreter 104 88 }; 105 89 106 _CoreExport void tclThread(TclInterpreterBundle* interpreterBundle, std::string command);90 _CoreExport void tclThread(TclInterpreterBundle* bundle, std::string command); 107 91 } 108 92
Note: See TracChangeset
for help on using the changeset viewer.