如何通过 ID 而不是字符串名称来 g_signal_connect() ?

问题描述 投票:0回答:1

GTK 中处理按钮按下的典型方法是:

g_signal_connect(GTK_BUTTON(myButton), "pressed", G_CALLBACK(myButtonHandler), NULL);

但是,我发现使用字符串(如

"pressed"
)进行内部识别很糟糕,很慢,而且没有必要。如果我能找到与此相对应的数字信号 ID,我就可以跳过解析步骤。但是如何通过 ID 而不是字符串名称连接事件呢?我做了很多挖掘,发现了this,我还了解到
g_signal_connect
是一个扩展为
g_signal_connect_data
的宏,但这些都不能完全解决我的问题。

这可能吗?如果可以,我该怎么做?

c gtk micro-optimization
1个回答
3
投票

您可以使用

g_signal_connect_closure_by_id()
但随后您必须创建一个
GClosure
结构来保存您的回调和回调数据。

我真的建议不要这样做,因为它会在你的代码中添加样板,但没有什么好处。您通常只连接信号一次。如果您在紧密循环中连接信号,那么您可能做错了什么,或者您有一个非常不寻常的用例。不管怎样,信号名称实际上是被保留的,这意味着您甚至不会产生字符串比较的成本;如果信号有详细注释,则仅在

:
处分割字符串的成本。不要费心去优化它,除非它实际上在你的分析器图表上显示为瓶颈。

© www.soinside.com 2019 - 2024. All rights reserved.