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

操作系统开发

开发平台:

DOS

  1. /**************************************************************************/
  2. /* test1                                                                  */
  3. /* This is an interesting demonstration showing the effect of changing    */
  4. /* the system clock, pre-emptive operation.                               */
  5. /*                                                                        */
  6. /* We create thread1 and use pre-emptive tasking, because thread1 never   */
  7. /* yields.  So the fact that the main thread EVER executes shows the      */
  8. /* pre-emptive operation.                                                 */
  9. /*                                                                        */
  10. /* Normally the system uses the default PC interrupt rate, 18.2 times     */
  11. /* per second.                                                            */
  12. /*                                                                        */
  13. /* Pass this program an argument of 100 to change the PC rate to 100/s    */
  14. /* or 1000 to change the tick to 1000/s or 1 ms.                          */
  15. /*                                                                        */
  16. /**************************************************************************/
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <setjmp.h>
  20. #include <dos.h>
  21. #include <alloc.h>
  22. #include <mem.h>
  23. #include <conio.h>
  24. #include <rtos.h>
  25. /*********************************************************/
  26. void test(DWORD arg)
  27. {
  28.     int i, j;
  29.     kwindow( 1, 1, 80, 6 );
  30.     do {
  31.         cprintf("in thread #1.%lu %inr", arg, i);
  32.         i++;
  33.         /* introduce a random delay */
  34.         for ( j = 0 ; j < rand(); ++j );
  35.     } while ( i < 20000 );
  36. }
  37. /*--------------------------------------------------------------------*/
  38. main(int argc, char **argv)
  39. {
  40.     int i;
  41.     kpreemptive = 1;
  42.     kdebug = 1;
  43.     rt_init( 100 );
  44.     if ( argc > 1 ) {
  45.         i = atoi( argv[1] );
  46.         if ( ( i > 0 ) && ( i < 1001 ))
  47.             rt_timerfreq( i );
  48.     }
  49.     kwindow( 1, 6, 80, 16 );
  50.     cputs("starting...rn");
  51.     rt_newthread( test,  1,2048, 0, "worker 1" );
  52.     rt_sleep( 100 );
  53.     for ( i = 0 ; i < 25000 ; ++i ) {
  54.         rt_sleep( 10 );
  55.         cprintf("in main %inr", i);
  56.     }
  57. }