如何解决如何通过 ID 而不是字符串名称 g_signal_connect() ?
在 GTK 中处理按钮按下的典型方法是:
g_signal_connect(GTK_BUTTON(myButton),"pressed",G_CALLBACK(myButtonHandler),NULL);
但是,我发现使用字符串(例如 "pressed"
)进行内部标识很糟糕、很慢并且没有必要。如果我能找到与此对应的数字信号 ID,我可以跳过解析步骤。但是如何通过 ID 而不是字符串名称连接事件?我做了很多挖掘并找到了 this,我还了解到 g_signal_connect
是一个扩展为 g_signal_connect_data
的宏,但这些都不能完全解决我的问题。
这可能吗,如果可能,我该怎么做?
解决方法
您可以使用 g_signal_connect_closure_by_id()
,但随后您必须创建一个 GClosure
结构来保存您的回调和回调数据。
我真的不建议这样做,因为它会将样板添加到您的代码中而没有什么好处。您通常只连接一次信号。如果您在紧密循环中连接信号,那么您可能做错了什么,或者您有一个非常不寻常的用例。无论如何,信号名称实际上是被保留的,这意味着您甚至不会产生字符串比较的成本;如果信号具有详细注释,则仅是在 :
处拆分字符串的成本。除非它实际上在您的分析器图表上显示为瓶颈,否则请不要对其进行优化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。