提问人:le1nax 提问时间:11/14/2023 最后编辑:le1nax 更新时间:11/16/2023 访问量:29
在信号处理中处理事件的合适方法是什么?(ImGui 集成开发环境)[关闭]
Whats the suitable way of handling events in signal processing? (ImGui IDE) [closed]
问:
我希望实现一种处理输入更改的功能,即在 GUI 中单击的按钮,或者在我的情况下,udp 套接字接收的信号。我希望以某种方式处理事件,即在类中接收的对象被传递给另一个类的成员函数。Foo fooReceived
Receiver
handlerFunc(Foo fooReceived)
Handler
到目前为止,我想出了两种方法:
使用信号时隙过程:每当事件发生时,都会发出信号,从而唤起时隙,这是 的公共成员函数。我在开发 GUI 时使用了这种方法。可以在此处找到该库的基本示例。
handlerFunc(Foo fooReceived)
Receiver
GTKMM
sigc++
对函数对象使用回调过程:
#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;
}
请注意,在第二种方法中,它必须有一个实例,因此可以设置回调。因此,我必须在类中设置一个成员实例,这在信号时隙方法中并非如此。Handler
Handler
Receiver
由于我希望通过在非Gtk的GUI(ImGui)中绘制数据来处理数据,因此我觉得不应该使用。
设置成员实例会导致任何问题吗?这种方法有哪些潜在风险?sigc++
Handler
答: 暂无答案
评论