假设我有两个类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/