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

操作系统开发

开发平台:

DOS

  1. /**************************************************************************/
  2. /* test8                                                                  */
  3. /* This example shows how priorities work.                                */
  4. /*                                                                        */
  5. /**************************************************************************/
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <setjmp.h>
  9. #include <dos.h>
  10. #include <mem.h>
  11. #include <conio.h>
  12. #include <rtos.h>
  13. #define MAXTHREADS 4
  14. thread_x *th[ MAXTHREADS ];
  15. /*********************************************************/
  16. void test(DWORD arg)
  17. {
  18.     int i, j;
  19.     kwindow( arg*80/MAXTHREADS+1, 1, (arg+1)*80/MAXTHREADS , 16 );
  20.     do {
  21.         cprintf("in thread #%lu %inr", arg, i);
  22.         i = ( i + 1 ) % 1000;
  23.         rt_yield();
  24.     } while ( 1 );
  25. }
  26. /*--------------------------------------------------------------------*/
  27. main(int argc, char **argv)
  28. {
  29.     int i,j;
  30.     clrscr();
  31. //    kpreemptive = 1;
  32.     kdebug = 1;
  33.     rt_init( 100 );
  34.     kwindow( 1, 17, 79, 25 );
  35.     cputs("starting all threads...rn");
  36.     for ( i = 0 ; i < MAXTHREADS ; ++i )
  37.         th[i] = rt_newthread( test,  i ,4096, 96, "worker n" );
  38.     /* first state - all running */
  39.     cprintf("They are all running at the same priority for nowrn");
  40.     for ( j = 4 ; j ; --j ) {
  41.         cprintf(" %u r", j );
  42.         rt_sleep( 1000 );
  43.     }
  44.     /* second state - cycle through the children, one at a time */
  45.     /*                by setting its priority above others      */
  46.     for ( j = 0 ; j < MAXTHREADS ; ++j ) {
  47.         cprintf("giving priority to thread %u r", j);
  48.         for ( i = 0 ; i < MAXTHREADS ; ++i )
  49.             rt_setpriority( th[i], (i==j) ? 65 : 96 );
  50.         rt_sleep( 4 * 1000 );
  51.     }
  52.     /* third state  - start with one thread and keep adding one */
  53.     /*                by increasing its priority to match first */
  54.     for ( j = 0 ; j < MAXTHREADS ; ++j ) {
  55.         cprintf("bumping up priority on thread %u r", j);
  56.         rt_setpriority( th[j], 64 );
  57.         rt_sleep( 4 * 1000 );
  58.     }
  59. }