Changeset 3989

Show
Ignore:
Timestamp:
04/08/05 11:03:21
Author:
bbralo
Message:

usleep implementation

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • OpenThreads/branches/Usleep/include/OpenThreads/Thread

    r3332 r3989  
    329329    int setProcessorAffinity( unsigned int cpunum ); 
    330330 
     331    /** usleep method.  This is not strictly thread API but is used  
     332      * so often with threads. It's basically UNIX usleep. Parameter is  
     333      * number of microseconds we current thread to sleep. Returns 0 on  
     334      * succes, non-zero on failure (UNIX errno or GetLastError() will give 
     335      * detailed description. 
     336      */ 
     337    static int usleep( unsigned int microsec); 
     338 
    331339private: 
    332340 
  • OpenThreads/branches/Usleep/pthread_src/PThread.c++

    r3335 r3989  
    833833 
    834834} 
     835 
     836// Description:  sleep  
     837// 
     838// Use: public 
     839// 
     840int Thread::usleep(unsigned int microsec) 
     841{ 
     842    return ::usleep(microsec); 
     843} 
  • OpenThreads/branches/Usleep/sproc_src/SprocThread.c++

    r2887 r3989  
    753753} 
    754754 
     755//----------------------------------------------------------------------------- 
     756// Description:  sleep  
     757// 
     758// Use: public 
     759// 
     760int Thread::usleep(unsigned int microsec) 
     761{ 
     762    return ::usleep(microsec); 
     763} 
     764 
    755765static void sproc_dead_child_sig_handler(int sigid) { 
    756766 
  • OpenThreads/branches/Usleep/win32_src/Win32Thread.cpp

    r3341 r3989  
    602602int SwitchToThread (void) 
    603603{ 
    604     Sleep(10); 
     604    ::Sleep(10); 
    605605    return 0; 
    606606}; 
     
    612612} 
    613613 
     614int Thread::usleep(unsigned int microsec) 
     615{ 
     616#if _WIN32_WINNT < 0x0400 // simulate 
     617    ::Sleep(microsec/1000); 
     618    return 0; 
     619#else 
     620    HandleHolder sleepTimer(CreateWaitableTimer(NULL, TRUE, NULL)); 
     621 
     622    if( !sleepTimer ) 
     623      return -1; 
     624     
     625    LARGE_INTEGER t; 
     626 
     627    t.QuadPart= -(LONGLONG)microsec*10; // in 100ns units 
     628                 // negative sign means relative, 
     629 
     630    if (!SetWaitableTimer(sleepTimer.get(), &t, 0, NULL, NULL, 0)) 
     631    { 
     632        return -1; 
     633    } 
     634 
     635    // Wait for the timer. 
     636    if (WaitForSingleObject(sleepTimer.get(), INFINITE) != WAIT_OBJECT_0) 
     637    { 
     638        return -1; 
     639    }  
     640    return 0; 
     641#endif 
     642}