wxWidgets中的通知?

时间:2009-01-02 15:03:42

标签: wxwidgets

我正在使用C ++ / wxWidgets开发一个小型应用程序,其中GUI的几个部分需要根据例如更新来更新。收到UDP数据报。更具体地说,辅助线程试图在网络中保留可用的“客户端”列表(可能会出现和离开),例如,需要更新UI中相应的组合框以反映更改。

文档提到对于这种事情,EVT_UPDATE_UI将是一个不错的选择。据我可以从稀疏文档中了解到,此事件由系统自动发送,并为辅助UI更改提供一些支持。

然而,使用更直接的方法,例如在窗口对象可以注册/订阅以在特定事件时接收通知(事件或回调),并且代码的另一部分在需要时发送这些通知。我可以使用我自己的代码在C ++中执行此操作,但我想如果wxWidgets已经支持类似的东西,我应该使用它。但是我没有在这方面找到任何东西。

所以,问题是:wxWidgets是否支持这种通知系统(或类似的替代方案),还是我最好自己编写代码?

2 个答案:

答案 0 :(得分:1)

AFAIK在wxWidgets中没有任何东西可以直接使用,但是单独使用它似乎很容易。

我会做什么:

  • 创建一个wxEvtHandler-descendent类来保存网络中可用的“客户端”列表。让这个类有一个wxCriticalSection,并在添加或删除“clients”的所有方法中使用wxCriticalSectionLocker。

  • 通过继承wxThread来创建工作线程类,以使用阻塞调用来处理UDP数据报。每当必须添加或删除客户端时,线程应直接调用客户端列表对象的方法。在这些方法中更新客户端列表,并将:: wxPostEvent()事件更新为自身(这将在主GUI线程中执行整个通知调用)。

  • 处理客户端列表类中的事件,并通知所有侦听器客户端列表已更改。观察者模式在我看来很合适。您可以直接调用所有已注册侦听器的方法,也可以向它们发送wxCommandEvent。

答案 1 :(得分:0)

您是否尝试在更改的窗口小部件上调用Update()?更新组合框的内容后,调用Update(),内容应更新。