Changeset 11 for nrEngine


Ignore:
Timestamp:
12/16/2006 06:26:42 PM (13 years ago)
Author:
art
Message:
 
Location:
nrEngine
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • nrEngine/Makefile

    r10 r11  
    22# Bypass the targets to subdirs 
    33#------------------------------------ 
    4 include ../Makedefs 
     4include ../Make/Makedefs 
    55 
    6 SUBDIRS = src 
     6SUBDIRS = include/events include src 
    77         
    8 all: 
    9         $(MAKE_TARGET_BEGIN) all $(MAKE_TARGET_END) 
    10  
    11 clean: 
    12         $(MAKE_TARGET_BEGIN) clean $(MAKE_TARGET_END) 
     8include ../Make/Makedirrules 
  • nrEngine/include/IThread.h

    r1 r11  
    2020#include "Prerequisities.h" 
    2121 
    22 #include <boost/thread/thread.hpp> 
    23 #include <boost/thread/mutex.hpp> 
    24  
     22#include <pthread.h> 
     23                 
    2524namespace nrEngine{ 
    2625 
     
    5049         * that kernel want to stop the thread. Suspending the task will cause the kernel 
    5150         * to let the according thread sleeping until the task is resumed. There is 
    52          * no other way how you can let the task to sleep. 
     51         * no other way how you can let the task sleep. 
    5352         * 
    5453         * So how the thread interface cooperate with the kernel and the task interface. 
     
    6463         * between starting a task as a task or as a thread. 
    6564         * 
    66          * In each cycly the kernel does call taskUpdate() method for sequential tasks. For 
     65         * In each cycle the kernel does call taskUpdate() method for sequential tasks. For 
    6766         * parallel tasks (threads) it does not call anything, because thread interface already 
    6867         * running and it will automaticaly call the appropritate taskUpdate() method, so 
     
    123122                private: 
    124123 
    125                         //! Store here the thread instance 
    126                         boost::thread*  mThread; 
    127  
    128124                        /** 
    129125                         * This is a entry point for a thread. The method is 
    130126                         * static because it do not have to access any data 
    131                          * of the objec titself. The given thread instance as a parameter 
     127                         * of the object itself. The given thread instance as a parameter 
    132128                         * will be updated and managed as a thread. 
    133129                         **/ 
    134                         static void run(IThread* mythread); 
     130                        static void* run(void* mythread); 
     131                        //static void run(IThread* mythread); 
    135132 
    136133                        //! Kernel is a friend class 
     
    180177                        volatile ThreadState    mThreadState; 
    181178 
    182                         //! Mutex to lock the data before use 
    183                         boost::mutex mMutex; 
     179                        // Mutex to lock the data before use 
     180                        //pthread_mutex_t mMutex; 
    184181 
     182                        //! Store here the thread instance 
     183                        pthread_t       mThread; 
     184 
     185                        //! Thread attributes 
     186                        pthread_attr_t mThreadJoinableAttr; 
     187                         
    185188                        //! Change a thread to new state, use mutex to lock the state 
    186189                        void changeState(ThreadState newState); 
  • nrEngine/src/IThread.cpp

    r1 r11  
    2525        IThread::IThread()// : EventActor(std::string("Thread_") + boost::lexical_cast<std::string>(id)) 
    2626        { 
    27                 mThread = NULL; 
     27                //mThread = NULL; 
    2828                mThreadState = THREAD_STOP; 
    2929        } 
     
    3333        { 
    3434                // delete the thread object if it is not empty 
    35                 if (mThread){ 
    36                         delete mThread; 
    37                 } 
     35                //if (mThread){ 
     36                        //delete mThread; 
     37                //} 
    3838        } 
    3939 
     
    4949                NR_Log(Log::LOG_KERNEL, "IThread: Create thread and start it"); 
    5050 
     51                // create the joinable attribute for thsi thread 
     52                pthread_attr_init(&mThreadJoinableAttr); 
     53                pthread_attr_setdetachstate(&mThreadJoinableAttr, PTHREAD_CREATE_JOINABLE); 
     54 
    5155                // now create a thread and let it run 
     56                //mThread = new boost::thread(boost::bind(IThread::run, this));          
    5257                mThreadState = THREAD_RUNNING; 
    53                 mThread = new boost::thread(boost::bind(IThread::run, this)); 
     58                int res = pthread_create(&mThread, &mThreadJoinableAttr, IThread::run, (void *)this); 
     59                if (res){ 
     60                        NR_Log(Log::LOG_KERNEL, Log::LL_ERROR, "IThread: creation of a thread failed with error code %d", res); 
     61                        return; 
     62                } 
     63    
    5464        } 
    5565 
     
    5767        void IThread::threadStop() 
    5868        { 
     69                // change state 
    5970                changeState(THREAD_STOP); 
    60                 mThread->join(); 
     71 
     72                // join the thread to the main process 
     73                //mThread->join(); 
     74                pthread_attr_destroy(&mThreadJoinableAttr); 
     75                int res = pthread_join(mThread, NULL); 
     76                if (res){ 
     77                        NR_Log(Log::LOG_KERNEL, Log::LL_ERROR, "IThread: can not join running thread (error code %d)", res); 
     78                        return; 
     79                } 
    6180        } 
    6281 
     
    7796        { 
    7897                // first lock the mutex and then change the state 
    79                 try{ 
     98                /*try{ 
    8099                        boost::mutex::scoped_lock lock(mMutex); 
    81100                        mThreadState = newState; 
    82101                }catch (boost::lock_error err) {} 
     102                */ 
     103 
     104                // lock the mutex change status and unlock it again 
     105                //pthread_mutex_lock(&mMutex); 
     106                mThreadState = newState; 
     107                //pthread_mutex_unlock(&mMutex); 
     108                 
    83109        } 
    84110 
    85111        //-------------------------------------------------------------------- 
    86         void IThread::run(IThread* mythread) 
     112        void* IThread::run(void* _mythread) 
    87113        { 
    88  
     114                // try to cast the given parameter to IThread pointer 
     115                IThread* mythread = static_cast<IThread*>(_mythread); 
     116                if (mythread == NULL) 
     117                { 
     118                        NR_Log(Log::LOG_KERNEL, Log::LL_ERROR, "IThread: not valid parameter was specified for IThread::run(void*) method"); 
     119                        return NULL; 
     120                } 
     121                 
    89122                // now loop the thread until some messages occurs 
    90123                bool run = true; 
     
    115148                        run = mythread->mThreadState != THREAD_STOP; 
    116149                } 
     150                 
    117151                // notice to stop the underlying task 
    118152                mythread->_noticeStop(); 
     153 
     154                // exit the thread 
     155                pthread_exit(NULL); 
    119156        } 
    120157 
  • nrEngine/src/Makefile

    r8 r11  
    44# Include defs for defining the variables 
    55#----------------------------------------------- 
    6 include $(TOPDIR)/Makedefs 
     6include $(TOPDIR)/Make/Makedefs 
    77 
    88#----------------------------------------------- 
     
    5050                VariadicArgument.cpp\ 
    5151                KernelEvent.cpp 
    52                          
    53 TARGET=  ../libnrEngine.so 
    5452 
     53# define used vairables 
     54TARGET=  libnrEngine.so 
    5555INCPATH += -I../include 
    5656CFLAGS += -fPIC 
    57 LIBS += -ldl -lboost_thread 
     57LIBS += -ldl -pthread 
     58 
     59# define files for installation 
     60INSTALL_DST_LIB = $(INST_LOCATION_LIB) 
     61INSTALL_SRC_LIB = $(TARGET) 
    5862 
    5963#----------------------------------------------- 
    6064# Include rules for handling the objects 
    6165#----------------------------------------------- 
    62 include $(TOPDIR)/Makerules 
     66include $(TOPDIR)/Make/Makerules 
    6367sinclude make.dep 
Note: See TracChangeset for help on using the changeset viewer.