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

📄 temperature_monitor2.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// Temperature_Monitor2.cpp,v 1.5 2005/04/23 05:52:26 ossama Exp#include "ace/OS_NS_time.h"#include "ace/OS_NS_unistd.h"#include "ace/Log_Msg.h"#include "Thermometer.h"#include "Temperature_Monitor2.h"#include "EMail.h"// Listing 1 code/ch21void Temperature_Monitor2::record_temperature (float temp){  Name_Binding_Ptr current    (this->naming_context_.fetch ("current"));  if (current.get ())    {      this->naming_context_.rebind ("previous",                                    current->value ());    }  this->record_history (temp);  this->naming_context_.unbind ("lastFailure");  this->naming_context_.unbind ("lastReset");  this->naming_context_.unbind ("resetCount");}// Listing 1// Listing 2 code/ch21void Temperature_Monitor2::record_history (float temp){  int now = (int)ACE_OS::time ();  this->shared_context_.rebind ("lastUpdate", now);  Name_Binding_Ptr counter    (this->shared_context_.fetch ("counter"));  int counterValue = counter.get () ? counter->int_value () : 0;  char name[BUFSIZ];  ACE_OS::sprintf (name, "history[%d]", counterValue);  char value[BUFSIZ];  ACE_OS::sprintf (value, "%d|%.2f", now, temp);  this->shared_context_.rebind (name, value);  ++counterValue;  counterValue %= this->opt_.history_size ();  this->shared_context_.rebind ("counter", counterValue);}// Listing 2void Temperature_Monitor2::reset_device (Name_Binding_Ptr &resetCount){  int number_of_resets = 1;  if (resetCount.get ())    {      number_of_resets = resetCount->int_value () + 1;      if (number_of_resets > this->opt_.excessive_resets ())        {          EMail notification;          char message[BUFSIZ];          ACE_OS::sprintf (message,                           "Thermometer: %s\n"                           "Reset Count: %d\n",                           this->thermometer_->address (),                           number_of_resets);          notification.send (this->opt_.admin_email (),                             this->opt_.email_from (),                             "Excessive number of thermometer resets",                             message);        }    }  this->thermometer_->reset ();  this->naming_context_.rebind ("lastReset", (int)ACE_OS::time ());  this->naming_context_.rebind ("resetCount", number_of_resets);}void Temperature_Monitor2::record_failure (void){  Name_Binding_Ptr lastFailure (this->naming_context_.fetch ("lastFailure"));  Name_Binding_Ptr lastReset (this->naming_context_.fetch ("lastReset"));  Name_Binding_Ptr resetCount (this->naming_context_.fetch ("resetCount"));  int now = ACE_OS::time ();  int lastFailureTime;  int lastResetTime = 0;  if (lastFailure.get ())    {      lastFailureTime = lastFailure->int_value ();    }  else    {      this->naming_context_.rebind ("firstFailure", now);      this->naming_context_.rebind ("lastReset", now);      lastFailureTime = now;      lastResetTime = now;    }  if (lastReset.get ())    {      lastResetTime = lastReset->int_value ();    }  if (now - lastResetTime > this->opt_.reset_interval ())    {      this->reset_device (resetCount);    }  this->naming_context_.rebind ("lastFailure", now);}void Temperature_Monitor2::monitor (void){  this->thermometer_ = new Thermometer (this->opt_.thermometer_address ());  for (;;)    {      float temp = this->thermometer_->temperature ();      ACE_DEBUG ((LM_INFO, ACE_TEXT ("Read temperature %.2f\n"), temp));      if (temp >= 0)        {          this->record_temperature (temp);        }      else        {          this->record_failure ();        }      ACE_OS::sleep (this->opt_.poll_interval ());    }  delete this->thermometer_;}

⌨️ 快捷键说明

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