Changeset 12 for nrEngine/src


Ignore:
Timestamp:
12/16/06 22:39:50 (14 years ago)
Author:
art
Message:
  • Friendly thread execution added (yielding of threads and main thread)
  • Test directory added, where simple test programms will be build
  • Each Makefile now contains the TOPDIR variable
Location:
nrEngine/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • nrEngine/src/IThread.cpp

    r11 r12  
    4949                NR_Log(Log::LOG_KERNEL, "IThread: Create thread and start it"); 
    5050 
     51                // initialise the attribute 
     52                pthread_attr_init(&mThreadAttr); 
     53 
    5154                // create the joinable attribute for thsi thread 
    52                 pthread_attr_init(&mThreadJoinableAttr); 
    53                 pthread_attr_setdetachstate(&mThreadJoinableAttr, PTHREAD_CREATE_JOINABLE); 
     55                pthread_attr_setdetachstate(&mThreadAttr, PTHREAD_CREATE_JOINABLE); 
    5456 
     57                // setup thread scheduling attribute 
     58                pthread_attr_setschedpolicy(&mThreadAttr, SCHED_RR); 
     59                /*if ( pthread_attr_setschedparam(&mThreadAttr, &param1) != 0 ) { 
     60                        printf("pthread_attr_setschedparam failed"); 
     61                        exit(0); 
     62                }*/ 
     63                 
    5564                // now create a thread and let it run 
    56                 //mThread = new boost::thread(boost::bind(IThread::run, this));          
    5765                mThreadState = THREAD_RUNNING; 
    58                 int res = pthread_create(&mThread, &mThreadJoinableAttr, IThread::run, (void *)this); 
     66                int res = pthread_create(&mThread, &mThreadAttr, IThread::run, (void *)this); 
    5967                if (res){ 
    6068                        NR_Log(Log::LOG_KERNEL, Log::LL_ERROR, "IThread: creation of a thread failed with error code %d", res); 
     
    7280                // join the thread to the main process 
    7381                //mThread->join(); 
    74                 pthread_attr_destroy(&mThreadJoinableAttr); 
     82                pthread_attr_destroy(&mThreadAttr); 
    7583                int res = pthread_join(mThread, NULL); 
    7684                if (res){ 
     
    107115                //pthread_mutex_unlock(&mMutex); 
    108116                 
     117        } 
     118 
     119        //-------------------------------------------------------------------- 
     120        void IThread::yield(IThread* mythread) 
     121        { 
     122                // use pthread to yield the timeslice 
     123                pthread_yield(); 
    109124        } 
    110125 
     
    147162                        // this is a reading mutex, so do not have to lock it 
    148163                        run = mythread->mThreadState != THREAD_STOP; 
     164 
     165                        // we now yield the used timeslice for another threads 
     166                        yield(mythread); 
    149167                } 
    150168                 
  • nrEngine/src/Kernel.cpp

    r1 r12  
    130130                } 
    131131 
     132                // Now we yield the running thread, so that we get user friendly 
     133                // thread behaviour. 
     134                IThread::yield(); 
     135                 
     136                // return good result 
    132137                return OK; 
    133138        } 
Note: See TracChangeset for help on using the changeset viewer.