在信号处理中处理事件的合适方法是什么?(ImGui 集成开发环境)[关闭]

Whats the suitable way of handling events in signal processing? (ImGui IDE) [closed]

提问人:le1nax 提问时间:11/14/2023 最后编辑:le1nax 更新时间:11/16/2023 访问量:29

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答。

8天前关闭。

这篇文章是在 7 天前编辑并提交审核的。

我希望实现一种处理输入更改的功能,即在 GUI 中单击的按钮,或者在我的情况下,udp 套接字接收的信号。我希望以某种方式处理事件,即在类中接收的对象被传递给另一个类的成员函数。Foo fooReceivedReceiverhandlerFunc(Foo fooReceived)Handler

到目前为止,我想出了两种方法:

  1. 使用信号时隙过程:每当事件发生时,都会发出信号,从而唤起时隙,这是 的公共成员函数。我在开发 GUI 时使用了这种方法。可以在此处找到该库的基本示例。handlerFunc(Foo fooReceived)ReceiverGTKMMsigc++

  2. 对函数对象使用回调过程:

#include <functional>
#include <iostream>

struct Foo {
    int data;
};

// Handler class with a member function to handle the received data
class Handler {
public:
    void handlerFunc(const Foo& fooReceived) {
        //handle fooReceived
    }
};

// Receiver class with a callback mechanism
class Receiver {
public:
    // Define a callback type using std::function
    using CallbackType = std::function<void(const Foo&)>;

    // Set the callback function
    void setCallback(const CallbackType& callback) {
        callback_ = callback;
    }

    // Simulate receiving data and trigger the callback
    void receiveData(const Foo& foo) {
        if (callback_) {
            callback_(foo);
        }
    }

private:
    // Callback function to be triggered when data is received
    CallbackType callback_;
};

int main() {
    Handler handler;
    Receiver receiver;

    // Set the callback function in the Receiver
    receiver.setCallback(std::bind(&Handler::handlerFunc, &handler, std::placeholders::_1));

    // Simulate receiving data in the Receiver
    Foo receivedFoo{42};
    receiver.receiveData(receivedFoo);

    return 0;
}

请注意,在第二种方法中,它必须有一个实例,因此可以设置回调。因此,我必须在类中设置一个成员实例,这在信号时隙方法中并非如此。HandlerHandlerReceiver

由于我希望通过在非Gtk的GUI(ImGui)中绘制数据来处理数据,因此我觉得不应该使用。 设置成员实例会导致任何问题吗?这种方法有哪些潜在风险?sigc++Handler

C++ 事件 处理 信号 imgui

评论

0赞 Botje 11/14/2023
Imgui 是一个即时模式 gui,因此任何 ui 差异都直接来自不同的数据或代码路径。这就是为什么许多小部件函数返回一个值来指示它们已经与之交互的原因

答: 暂无答案