TEST13.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:2k
源码类别:

操作系统开发

开发平台:

DOS

  1. /**************************************************************************/
  2. /* test13                                                                 */
  3. /* This example demonstrates rt_yield(), rt_sleep(0), rt_sleep(500)       */
  4. /**************************************************************************/
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <conio.h>
  8. #include <rtos.h>
  9. /*********************************************************/
  10. void test(DWORD arg)
  11. {
  12.     int i = 0;
  13.     kwindow( 1, 1, 80, 6 );
  14.     while ( 1 ) {
  15.         cprintf("%u ", i++);
  16.         switch ( arg ) {
  17.             case 0 : rt_yield(); break;
  18.             case 1 : rt_sleep( 0 ); break;
  19.             case 2 : rt_sleep( 100 );
  20.         }
  21.     }
  22. }
  23. /*********************************************************/
  24. void heartbeat(DWORD arg)
  25. {
  26.     int i = 0;
  27.     kwindow( 1, 6, 80, 12 );
  28.     cputs("Heartbeat threadrn");
  29.     /* run at low priority */
  30.     rt_setpriority( NULL, 127 );
  31.     while ( 1 ) {
  32.         cprintf("%u ", i++);
  33.         rt_sleep(0);
  34.     }
  35. }
  36. void runtest( DWORD testnum, char *s )
  37. {
  38.     void *x, *hb;
  39.     hb = rt_newthread( heartbeat, 0, 4096, 0, "heartbeat");
  40.     x = rt_newthread( test,  testnum ,4096, 0, "worker" );
  41.     cputs(s);
  42.     /* let the test run, then stop it */
  43.     rt_sleep( 3000 );
  44.     kdestroythread( x );
  45.     kdestroythread( hb );
  46.     /* signal the user */
  47.     sound( 100 );
  48.     rt_sleep( 20 );
  49.     nosound();
  50. }
  51. /*--------------------------------------------------------------------*/
  52. main(int argc, char **argv)
  53. {
  54.     int i;
  55.     kdebug = 1;
  56.     rt_init( 100 );
  57.     kwindow( 1, 12, 80, 25 );
  58.     rt_timerfreq( 100 );
  59.     cputs("The top window executes at normal priority, the second window is low priorityrn");
  60.     cputs("This demonstrates the effects of a normal program yielding and sleepingrnn");
  61.     /* rt_yield() */
  62.     runtest( 0, "Top thread is calling rt_yield()rn"
  63.                 "Only yields to similar or higher priority threads. Heartbeat does not qualify.rnn");
  64.     /* rt_sleep( 0 ) */
  65.     runtest( 1, "Now, top thread is calling rt_sleep( 0 )rn"
  66.                 "Yields current time slice, even low priority threads get a chancernn");
  67.     /* rt_sleep( 1 ) */
  68.     runtest( 2, "Now, top thread is calling rt_sleep( 100 )rn"
  69.                 "Sleeps for a spell, allowing other threads to execute for 100msn");
  70. }