summaryrefslogtreecommitdiff
path: root/tvision/compat/yieldpro.c
blob: 91c2bb032c8492241eae3348c28675b2e55cba76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <tv/configtv.h>

#ifdef TVCompf_djgpp
#include <dpmi.h>
#include <unistd.h>

void CLY_YieldProcessor(int micros)
{
 __dpmi_yield();
 if (micros>0)
    usleep(micros);
}
#endif

#if defined(TVOSf_QNX4)
   #include <time.h>
   
   static void usleep(unsigned long sleeptime)
   {
      struct timespec wait;
      
      wait.tv_sec=0;
      wait.tv_nsec=sleeptime;
      
      do {
         if (nanosleep(&wait, &wait)==0)
         {
            break;
         }
      } while(1);
   }
#endif // TVOSf_QNX4

#ifdef TVOS_UNIX
#include <unistd.h>
 // See if this system have the POSIX function
 #if 0 //def _POSIX_PRIORITY_SCHEDULING
 #include <sched.h>

 void CLY_YieldProcessor(int micros)
 {
  sched_yield();
  if (micros>0)
     usleep(micros);
 }
 #else
 // No POSIX, just sleep
 void CLY_YieldProcessor(int micros)
 {
  if (micros<0)
     micros=10000; // 10 ms
  usleep(micros);
 }
 #endif
#endif

#ifdef TVComp_BCPP //TVOSf_NT
void CLY_YieldProcessor(int micros)
{
 extern void __tvWin32Yield(int micros);
 if (micros<0)
    micros=27472; // 1000000 / (18.2 * 2)
 __tvWin32Yield(micros);
}
#endif

#if defined(TVOS_Win32) && !defined(TVComp_BCPP) //!defined(TVOSf_NT)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>

void CLY_YieldProcessor(int micros)
{
 Sleep(micros/1000);
}
#endif