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

操作系统开发

开发平台:

DOS

  1. /*
  2.  * TEST12 - show multithread console i/o fundamentals
  3.  *
  4.  *          The big newswire services transmit stories to many newspapers
  5.  *          and radio stations, traditionally at relatively slow speeds.
  6.  *
  7.  *          But when there is nothing else to transmit, they
  8.  *          simply display a sentance repeatedly, a sentance which practices
  9.  *          every letter of the alphabet - thereby testing the equipment
  10.  *          and communications lines.
  11.  *
  12.  *          The output is paced to appear roughly at 300 baud, or 30 chars
  13.  *          per second.
  14.  */
  15. #include <stdio.h>
  16. #include <rtos.h>
  17. #include <process.h>
  18. #include <conio.h>
  19. #include <kconio.h>
  20. #include <string.h>
  21. bq_str *bq = NULL;          /* byte queue to hold input */
  22. void write_string( bq_str *bq, char *s )
  23. {
  24.     while ( *s )
  25.         bq_writebyte( bq, *s++);
  26. }
  27. void user_input_thread( DWORD dummy )
  28. {
  29.     char buffer[ 128 ];
  30.     kwindow( 1, 1, 80, 15);
  31.     cputs("Type quit to exitrn");
  32.     do {
  33.         buffer[ 0 ] = sizeof( buffer ) - 2;
  34.         kgets( buffer );
  35.         if ( !stricmp( buffer, "quit" ))
  36.             exit( 0 );
  37.         strcat( buffer, "rn");
  38.         /* now queue that data */
  39.         write_string( bq, buffer );
  40.         cputs("rn");
  41.     } while ( 1 );
  42. }
  43. void teletype_thread( DWORD dummy )
  44. {
  45.     BYTE ch;
  46.     kwindow( 1, 15, 80, 25 );
  47.     do {
  48.         if ( bq_getbyte( bq, &ch ) == 0 ) {
  49.             /* nothing there, send alphabet soup */
  50.             write_string( bq, "The quick brown fox jumped over the lazy dog.rn");
  51.         } else {
  52.             putch( ch );
  53.             rt_sleep( 1000 / 30 );
  54.         }
  55.     } while ( 1 );
  56. }
  57. main()
  58. {
  59.     rt_init(100);
  60.     bq = bq_alloc( 100 );
  61.     rt_newthread( user_input_thread, 2,4096, 0, "keyboard thread" );
  62.     rt_newthread( teletype_thread, 2,4096, 0, "teletype thread" );
  63.     while ( 1 )
  64.         rt_yield();
  65. }