main.cc
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:3k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.    File: main.cc
  3.    By: Alex Theo de Jong
  4.    Created: February 1996
  5.    Description:
  6.    Test Synchronization object for multiple streams
  7. */
  8. #pragma implementation
  9. #include "athread.hh" // Test OS independent threads/sema/lock classes
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <String.h>
  13. #include <iostream.h>
  14. #include <fstream.h>
  15. #include <unistd.h>
  16. #include "error.hh"
  17. #include "debug.hh"
  18. #include "util.hh"
  19. #include "sync.hh"
  20. extern "C" {
  21. unsigned int sleep(unsigned int);
  22. }
  23. int c1(0), c2(0);
  24. void* producer_thread(Synchronization* s){
  25.   int counter1=5, counter2=10, counter3=5;
  26.   ifstream file("mpeg2buff.o");
  27.   char data[3];
  28.   msg("producer_thread"); message(itoa(getpid()));
  29.   while (1){
  30.     file.read(data, 2);
  31.     s->put(double(counter1));
  32.       s->put(1, double(counter2), 8);
  33. //      s->put(2, double(counter2), 100);
  34.     if ((counter2 % 2)==0){
  35. //      s->put(1, double(counter2), 100);
  36. //      s->put(2, double(counter2), 100);   
  37.     }
  38. //    if ((counter3 % 3)==0) s->put(2, double(counter3), 100);
  39.     if ((counter1 % 10)==0){
  40.       msg("n");
  41.     }
  42.     if (counter1++>40) break;
  43.     counter2++;
  44.     counter3++;
  45.     sleep(1);
  46.   }
  47.   athr_exit(0);
  48.   return 0;
  49. }
  50. void* consumer2_thread(Synchronization* s);
  51. Synchronization* snc=0;
  52. void* consumer1_thread(Synchronization* s){
  53.   msg("consumer1_thread"); message(itoa(getpid()));
  54.   athr_t id3;
  55. //  athr_create((void*(*)(void*))consumer2_thread, snc, &id3);
  56.   while (1){
  57.     printf("byte %dn",s->usedbytes(1, 100));
  58.     printf("byte %dn",s->usedbytes(1, 100));
  59. printf("consumer 1 vor wait 1n");
  60.     s->wait(1);
  61. printf("consumer 1 nach wait 1n");
  62.     msg(">");
  63.     c1++;
  64.   }
  65.   athr_exit(0);
  66.   return 0;
  67. }
  68. void* consumer2_thread(Synchronization* s){
  69.   msg("consumer2_thread"); message(itoa(getpid()));
  70.   while (1){
  71.     s->usedbytes(2, 100);
  72.     s->wait(2);
  73. //    sleep(1);
  74.     msg("<");
  75.     c2++;
  76.   }
  77.   athr_exit(0);
  78.   return 0;
  79. }
  80. main(){
  81.   Synchronization* sync=0;
  82.   athr_t id, id2; // id3;
  83. /*
  84.   if (schedctl(NDPRI, 0, 40)<0) // default priority
  85.     cerr << "could not set NDPNORMMAX for mainn";
  86. */
  87.   
  88.   snc=sync=new Synchronization(0, 100, 200);   // Default = type 0, 2x Data, 1x Timer
  89.   athr_create((void*(*)(void*))producer_thread, sync, &id);
  90.   athr_create((void*(*)(void*))consumer1_thread, sync, &id2);
  91.   sched_param param;
  92.   int policy=0;
  93.   if (athr_getschedparam(athr_self(), &policy, &param)<0){
  94.     error("could not get scheduling params");
  95.     athr_exit(0);
  96.   }
  97.   else {
  98. #ifdef LINUX
  99.     msg("MAIN PRIORITY="); message(itoa(param.sched_priority));
  100. #else
  101.     msg("MAIN PRIORITY="); message(itoa(param.prio));
  102. #endif
  103.   }
  104.   char* c=new char[10];
  105. /*
  106.   cout << "testn";   // small test to see if cin blocks! and cout really 
  107.   cout << "test2";    // put stuff on the screeen
  108.   cout.flush();
  109.   printf("did I stop?n");
  110.   cin.gets(&c);
  111.   printf("I guess not!");
  112. */
  113.   do {
  114.     msg("Type 'q' to quit: ");
  115.     c[0]=getchar();
  116.     switch(c[0]){
  117.       case '0' : msg("ok"); break;
  118.       default  : break;
  119.     }
  120.   }
  121.   while (c[0]!='q' && c[0]!='Q');
  122.   delete c;
  123.   athr_join(id);
  124.   String text="Consumer 1 : ";
  125.   text+=itoa(c1);
  126.   text+=", Consumer 2 : ";
  127.   text+=itoa(c2);
  128.   message(text.chars());
  129. printf("vor deleten");
  130.   delete sync;
  131. printf("nach deleten");
  132.   exit(0);
  133. }