假设我有两个类Fly和Bee,这些方法(分别运行和循环)在不同的时间运行。

/* Fly */
using namespace boost::asio
using namespace boost::posix_time

class Fly {
...
deadline_timer timeout_fly_;
char text_fly_;

Fly::Fly( io_service &io): timeout_fly_(io, seconds(4) )
{
    timeout_fly_.async_wait( boost::bind( &Fly::run, this ) );
}

Fly::run(void)
{
    std::cout << "Running Fly forever" << std::endl;

     timeout_fly_.expires_at( timeout_fly_.expires_at() + seconds(4)));
     timeout_fly_.async_wait( boost::bind( &Fly::run, this ) );
}


和:

/* Bee */
class Bee {
...
deadline_timer timeout_bar_;
char text_bee_;

Bee::Bee(io_service &io): timeout_bee_(io, seconds(2) )
{
    timeout_bee_.async_wait( boost::bind( &Bee::loop, this ) );
}

Bee::loop(void)
{
     std::cout << "Running Bee forever" << std::endl;

     timeout_bee_.expires_at( timeout_bee_.expires_at() + seconds(2) );
     timeout_bee_.async_wait( boost::bind( &Bee::loop, this ) );
 }


主要从下面开始:

/* main.cpp */
io_service io_service;

while(1) {

    io_service.run();
}


现在我有一个问题,我需要在两个类之间交换一些数据(例如char文本)。但是我卡住了,无法解决此问题,因为我不知道该怎么做。

我正在考虑将一个班级传授给另一个班级作为参考:

using namespace boost::asio
using namespace boost::posix_time

class Fly {
...
  deadline_timer timeout_fly_;
  Bee bee_;
  char text_fly_;
...

  Fly::Fly(io_service &io, Bee &bee): timeout_fly_(io,seconds(4)), bee_(bee)
  {
    timeout_fly_.async_wait(boost::bind( &Fly::run, this));
  }

  Fly::run(void)
  {
    std::cout << "Running Fly forever" << std::endl;

    text_fly_ = bee_->getTextInBee();

    timeout_fly_.expires_at(timeout_fly_.expires_at() + seconds(4));
    timeout_fly_.async_wait(boost::bind( &Fly::run, this));
  }


但是我不确定这是不是一个好的OOP设计。此外,它将使我的程序复杂化。我想让它尽可能简单。
另一个选择是创建2个不同的线程,让它们运行并用互斥锁保存结果以同步两个线程。

如何在两个类之间交换数据?

最佳答案

您可以将这两个类之间共享的任何东西包装在一个单独的对象中,并使两个类访问该对象的指针。
如果同时存在使用数据的Fly和Bee的竞争状况,则可以使用互斥锁。

关于c++ - 需要有关OOP设计的帮助,以在类之间共享变量,而这些独立运行计时器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35675501/

10-10 22:43