⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.cc

📁 支持组件模型CCM的开源中间件-mico
💻 CC
字号:
#include "simple.h"#include <CORBA.h>#include <mico/os-misc.h>                                                      #include <mico/util.h>                                                      #include <pthread.h>#include <sched.h>class doit: public MICOMT::Thread {public:  MICOMT::Mutex mt;  void _run (void *arg);};simple_var s;int loops;#define THRS  20doit *th[THRS];char c[] = "+.*-#";int main (int argc, char **argv);MICOMT::CondVar *cond1;MICOMT::CondVar *cond2;void doit::_run(void *v) {  char c = *(char *)v;   mt.lock();  cond1->wait( mt );  mt.unlock();  for (int i = 0; i < 10; i++) {      s->func( c );      yield();  }  mt.lock();  cond2->wait( mt );  mt.unlock();  for (int i = 0; i < loops; i++)  {    if (( i % 1000 ) == 0)       cout << i << endl;    try    {      s->func( c );    }    catch (CORBA::Exception &ex)    {      cerr << "client: caught exception";      ex._print (cerr);      cerr << endl;      return;    }    yield();  }}int main (int argc, char **argv) {  int i;   CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "mico-local-orb");   CORBA::Object_var o;   if (argc < 2)   {      cerr << "Usage: client <iterations>" << endl;      exit (0);   }   for ( int n = 0; n < 10; n++ ) {     o = orb->bind ("IDL:simple:1.0");     if (CORBA::is_nil (o))       {         cerr << "client: orb->bind (): to \"IDL:simple:1.0\" failed";         cerr << "\nclient: is the server running?" << endl;         exit (-1);       }   }   cerr << "binding test done." << endl;   s = simple::_narrow (o);   if (CORBA::is_nil (s))     {       cerr << "client: couldn't _narrow () to \"IDL:simple:1.0\"" << endl;       exit (-2);     }      cond1 = new MICOMT::CondVar;   cond2 = new MICOMT::CondVar;   loops = atoi (argv[1]);      for ( i = 0; i < THRS; i++ ) {     th[i] = new doit();     th[i]->start( &c[i % 5] );   }   // wait for all threads to start up   sleep(2);   // do a couple of invokations to make sure the   // cacheline are hot and all server-threads have been started   cerr << "starting pre-invoke test." << endl;   cond1->broadcast();   // wait for all threads to be finisched   sleep(5);   cerr << "starting invoke test." << endl;   CORBA::Long t1, t2;   t1 = OSMisc::timestamp();                                                       cond2->broadcast();   for ( i = 0; i < THRS; i++ ) {     th[i]->wait();     delete th[i];   }#ifdef FLUSH   try   {      s->flush();   }   catch (CORBA::Exception &ex)   {      cerr << "client: caught exception";      ex._print (cerr);      cerr << endl;   }#endif // FLUSH   cerr << "client: done" << endl;   t2 = OSMisc::timestamp();   double tt, pc;      tt = (double)(t2 - t1);   pc = (double)(t2 - t1)/ (loops*THRS);      cerr << tt << " ms total time" << endl;    cerr << pc << " ms per call" << endl;        cout << loops << " " << pc << " " << tt << endl;   return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -