consumer.C
上传用户:shtangtang
上传日期:2007-01-04
资源大小:167k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #define __THREADS_MAIN
  2. #include <thread.h>
  3. #include <string>
  4. extern "C" {
  5. #  include <unistd.h>
  6. };
  7. cond t_control;
  8. mutex t_link;
  9. string s;
  10. class producer : public pthread {
  11. public:
  12.   producer() { };
  13.   ~producer() { };
  14.   int thread(void *)
  15.     {
  16.       char *buf = new char[80];
  17.       cout << "Enter text for consumer: ";
  18.       cout.flush();
  19.       cin.getline(buf,80);
  20.       t_link.lock();
  21.       s = buf;
  22.       t_control.signal();
  23.       t_link.unlock();
  24.       delete buf;
  25.       return 0;
  26.     }
  27. };
  28. class consumer : public pthread {
  29. public:
  30.   consumer() { };
  31.   ~consumer() { };
  32.   int thread(void *)
  33.     {
  34.       int r;
  35.       t_link.lock();
  36.       t_control.wait(t_link);
  37.       cout << "Consumed: '" << s << "'n";
  38.       r = s.length();
  39.       t_link.unlock();
  40.       return r;
  41.     }
  42. };
  43. void
  44. hexdump(const unsigned char *ptr, int len)
  45. {
  46.   string s;
  47.   int i = 0;
  48.   while(i < len) {
  49.     if( (i%16) == 0 ) {
  50.       if ( i > 0 )
  51. cout << " ;" << s.c_str() << endl;
  52.       cout.form("%08X ",(int)ptr);
  53.       s = "";
  54.     }
  55.     cout.form(" %02X",(unsigned int)ptr[i]);
  56.     if ( isprint(ptr[i]) )
  57.       s += ptr[i];
  58.     else
  59.       s += '.';
  60.     i += 1;
  61.   }
  62.   while( (i%16) )
  63.     cout << "   ",i++;
  64.   cout << " ;" << s.c_str() << endl;
  65. }
  66. int main()
  67. {
  68.   pthread *p1, *p2;
  69.   p1 = new consumer;
  70.   p2 = new producer;
  71.   p1->join();
  72.   cout << "return value " << p1->retcode() << endl;
  73. }
  74.