- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 C++ 和 MFC(基于对话框)。
在我的主对话框中,我有一个名为 memmory 的对象(unsigned short*
,模拟 PLC 内存)和另一个名为 test
的对象,属于 A
.
对象 test
有一个内存引用并且能够改变它。在主对话框中有一些依赖于内存值的图表。
我的问题是:当对象 test
更改任何内存值时,我如何更新此图?
我可以为对象 test
提供对对话框的引用,每当测试更改内存时,只需调用对话框方法来更新图形。这是不可能的,因为对象 test
(类 A
)不能引用对话框(出于某种原因)。
另一种选择是设置一个计时器并每隔 X 毫秒重新绘制图表,但这个选项对我来说似乎有点脏。
我认为对象测试可以在每次更改内存时发送消息 PostMessage
,但为了这样做,我需要对对话框的引用,对吗?
如果有任何想法,我将不胜感激。
最佳答案
这里有一个完整的 Observer
模式示例。这是一个简单的例子,并不打算完美,例如 Observable
类的 name
属性是一个设计 问题。
我希望它能帮助您更好地了解 Observer
模式的工作原理。
#include <vector>
#include <iostream>
using namespace std;
class Observer
{
public:
Observer(){};
void notify(const char* name){
cout << "Notyification from: " << name << endl;
}
};
class Observable
{
public:
Observable(const char* name):name(name){};
// You can redefine in observable child classes the behaviour of notify_change.
virtual void notify_change(){
for (vector<Observer>::iterator it=observers.begin(); it != observers.end(); ++it)
{
(*it).notify(name);
}
}
inline const char* get_name() {return name;}
void register_observer(Observer obj){observers.push_back(obj);}
// You should add something like unregister_observer too.
private:
const char* name;
vector<Observer> observers;
};
class Boss: public Observer {
public:
Boss(){};
};
class Worker: public Observable {
public:
Worker(const char* name):Observable(name){}
void stop_working(){
notify_change();
}
};
int main()
{
Boss some_boss;
Worker some_worker("You");
some_worker.register_observer(some_boss);
some_worker.stop_working();
return 0;
}
关于c++ - 意识到对象何时更改某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23517518/
我注意到 Javascript 排序功能在低于 9 的 Internet Explorer 版本中非常慢(与 Firefox 和其他版本相比通常慢一个数量级。我正在实现我自己的版本以查看是否可以做得更
我有一个实现ContainerRequestFilter的类,我想向其中注入(inject)一些spring依赖项,所以我需要让Spring知道Jersey过滤器。过滤器本身是在我的 web.xml
有没有办法让 Mypy 意识到我知道我正在处理什么类型的对象,而无需在每个 if 语句中调用 isinstance?我希望有辅助函数来做那种事情,但即使我在辅助函数中有 isinstance,Mypy
我必须用法语翻译一个网站。现在,法语和许多其他语言一样,有性别和屈折变化。问题是: 如何创建包含可变部分为男性或女性的消息的 yaml 文件... 如何修改 i18n 生成器以支持此功能? 是否有任何
正如我发现的那样,Chrome 不会忽略空的 src,而是将当前查看的文件加载到其中。由于这个“功能”,我的统计数据出现了错误。 用这段代码创建 file.php... Here is my pag
我是一名优秀的程序员,十分优秀!