Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jul 19, 2009, 3:05:15 PM (15 years ago)
Author:
rgrieder
Message:

Re-reverting TclThreadManager changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/core/TclThreadManager.h

    r3313 r3318  
    3333
    3434#include <cassert>
    35 #include <list>
    3635#include <map>
    3736#include <string>
    38 #include "core/OrxonoxClass.h"
     37
     38#include "OrxonoxClass.h"
    3939
    4040namespace orxonox
    4141{
    42     // Internal struct
    43     struct TclInterpreterBundle;
    44 
    4542    class _CoreExport TclThreadManager : public OrxonoxClass
    4643    {
    47         friend class IRC;
    4844        friend class TclBind;
     45        friend void tclThread(TclInterpreterBundle* bundle, std::string command);
    4946
    5047        public:
    5148            TclThreadManager(Tcl::interpreter* interpreter);
    52             ~TclThreadManager();
     49            virtual ~TclThreadManager();
    5350
    54             static TclThreadManager& getInstance() { assert(singletonRef_s); return *singletonRef_s; }
     51            static TclThreadManager& getInstance() { assert(TclThreadManager::singletonPtr_s); return *TclThreadManager::singletonPtr_s; }
    5552
    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);
    6458
    6559            void error(const std::string& error);
     
    7165
    7266        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);
    7472
    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);
    7975
    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);
    8377            std::string dumpList(const std::list<unsigned int>& list);
    8478
    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);
    8980
    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
    9382
    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
    10488    };
    10589
    106     _CoreExport void tclThread(TclInterpreterBundle* interpreterBundle, std::string command);
     90    _CoreExport void tclThread(TclInterpreterBundle* bundle, std::string command);
    10791}
    10892
Note: See TracChangeset for help on using the changeset viewer.