Thank you for the suggestions.  Here are the results:
 

(1) replace the microsleep with the
OpenThreads::Thread::YieldCurrentThread() 
     report what happens
 
Works a little better. seems to stay on one thread for about a minute or
so and then jump to the next thread  for about a minute and repeats.
 Still not what I was expecting where the thread jumps back and forth
without delay.
 
(2) replce the microsleep only in the Thread class / method with
YieldCurrentThread
     report what happens 

About the same as #1, but the time in each thread seems to last a lot
longer.  Probably due to the microsleep time.
 
if both test are also negative, then replace microsleep with 
void millisleep( unsigned int milliseconds )
{
# ifdef _MSC_VER   // If its Visual C++ call Win32 Sleep function
   ::Sleep( milliseconds);
#else  // Else assume a UNIX/Linux system with nanosleep function
   timespec ts;
   ts.tv_sec = milliseconds / 1000;
   ts.tv_nsec = (milliseconds - ts.tv_sec*1000) * 1000000;
   ::nanosleep(&ts, NULL);
# endif
}
what happens ? 


Seem to behave as the original application did, where only one thread is
being called.  I did however use System::Threading::Thread::Sleep
instead of ::Sleep in order to compile.
 
I'll take a look at the links you send and report back if I get it
solved.
 
Thanks again for your help.  :)


        -----Original Message-----
        From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Adrian
Egli OpenSceneGraph (3D)
        Sent: Tuesday, May 27, 2008 11:31 PM
        To: OpenSceneGraph Users
        Subject: Re: [osg-users] Openthreads problem on 64 bit windows
system.
        
        
        Hi nelson, 
        
        i remeber a problem i got long time ago with openthreads and
windows, even on a 32 bit system. i located that we go an issue on
windows system with the 
        sleep method. (windows native). 
        
        so can you try following:
        
        (1) replace the microsleep with the
OpenThreads::Thread::YieldCurrentThread() 
             report what happens
        
        (2) replce the microsleep only in the Thread class / method with
YieldCurrentThread
             report what happens 
        
        if both test are also negative, then replace microsleep with 
        void millisleep( unsigned int milliseconds )
        {
        # ifdef _MSC_VER   // If its Visual C++ call Win32 Sleep
function
           ::Sleep( milliseconds);
        #else  // Else assume a UNIX/Linux system with nanosleep
function
           timespec ts;
           ts.tv_sec = milliseconds / 1000;
           ts.tv_nsec = (milliseconds - ts.tv_sec*1000) * 1000000;
           ::nanosleep(&ts, NULL);
        # endif
        }
        what happens ? 
        
        
        Have also a look into: 
        and search in google with adrian egli / openthreads / sleep 
        http://www.openscenegraph.org/projects/osg/changeset/5313 
        
        
        
        
        2008/5/28 Cysneros, Nelson SPAWAR <[EMAIL PROTECTED]>:
        



                I'm having a problem with an existing application that
runs well on a
                32-bit windows XP (VS 2003) system, but does not seem to
work when ran
                on a 64-bit windows XP (VS 2003) system.
                
                I narrowed down the problem to Openthreads, seems that
my threaded while
                loop never (or rarely) gets called.  I was able to
recreate the problem
                with this simple program below. It runs two threads,
both printing a
                message to the screen.  Only one message is displayed on
a 64bit
                machine.  I turned on OSG notification to DEBUG, but no
extra
                information is displayed.
                
                Has anyone else experience this problem?  Am I doing
something wrong?
                Thanks in advance.
                
                
                ///////////////////////////////////////
                //Header file MutexTest.h
                ///////////////////////////////////////
                #ifndef __MUTEXTEST_H_
                #define __MUTEXTEST_H_
                
                #include <OpenThreads/Thread>
                #include <OpenThreads/Mutex>
                #include <OpenThreads/Barrier>
                #include <OpenThreads/Block>
                #include <OpenThreads/ScopedLock>
                #include <iostream>
                
                class MutexTest : public OpenThreads::Thread
                {
                 public:
                         MutexTest();
                         ~MutexTest();
                         //Functions
                         virtual void run();
                     void quit();
                         void printHello();
                         void setMutex(OpenThreads::Mutex* newValue);
                         OpenThreads::Mutex* getMutex();
                
                 private:
                       mutable OpenThreads::Mutex*
_mutex;
                 };
                #endif
                
                
        
///////////////////////////////////////////////////////////////////
                //Source file MutexTest.cpp
        
///////////////////////////////////////////////////////////////////
                
                #include "MutexTest.h"
                
                MutexTest::MutexTest(){
                       _mutex = new OpenThreads::Mutex();
                }
                
                MutexTest::~MutexTest(){
                               std::cout<<"MutexTest Test Shuting
                down....."<<std::endl;
                }
                
                void MutexTest::setMutex(OpenThreads::Mutex* newValue){
                               _mutex = newValue;
                }
                
                OpenThreads::Mutex* MutexTest::getMutex(){
                       return _mutex;
                }
                
                   void MutexTest::quit() {
                
                       }
                
                       void MutexTest::printHello(){
        
OpenThreads::ScopedLock<OpenThreads::Mutex>
                lock(*_mutex);
                               std::cout<<"-- Mutex Class: Hello
--"<<std::endl;
                       }
                
                   void MutexTest::run() {
                          while(true){
                
                
        
//////////////////////////////////////////////////////////
                                  //This only gets called once when
running on 64bit
                system
                
        
/////////////////////////////////////////////////////////
                                       printHello();
                                       //sleep
        
OpenThreads::Thread::microSleep(5000);
                               }//while
                   }//run
                
                //
        
------------------------------------------------------------------------
                ---
                //
                //   main
                //
                //
        
------------------------------------------------------------------------
                ---
                int main(int argC, char* argV[])
                {
                       //Create a mutex we can share
                       OpenThreads::Mutex* mutable my_mutex = new
OpenThreads::Mutex;
                       MutexTest* testMutex = new MutexTest();
                       testMutex->setMutex(my_mutex);
                
                       //Start thread
                       testMutex->start();
                
                   while(true)
                   {
        
OpenThreads::ScopedLock<OpenThreads::Mutex>
                lock(*my_mutex);
                               std::cout<<"<<< Main: Hello
>>>"<<std::endl;
                               //sleep
                               OpenThreads::Thread::microSleep(2000);
                
                       }//while
                       return 0;
                }//main
                _______________________________________________
                osg-users mailing list
                [email protected]
        
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.or
g
                




        -- 
        ********************************************
        Adrian Egli 

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to