在 C 中引发和处理事件

Posted

技术标签:

【中文标题】在 C 中引发和处理事件【英文标题】:Raising and handling events in C 【发布时间】:2012-11-21 10:18:55 【问题描述】:

我正在将一些 C# 代码(主要是类)移植到 C。我已经分析了代码并且移植绝对是可能的。我不确定的一件事是如何处理(即实现)在 C 中引发事件。

我在 Linux 环境中,我希望二进制文件只能在 Linux 上运行。我听说 GLib 支持事件,但对此不太了解 - 任何帮助将不胜感激。

一个引发事件并在 C 中处理它的 hello world 示例将非常有用。

【问题讨论】:

最好不要假设想要回答这个问题的人了解 C# 足以理解您所说的“事件”是什么意思。那么,您能否澄清一下事件是什么,以及它们的用途是什么? 【参考方案1】:

GLib 实现的 C# 事件的关闭是 GObject signals。

使用g_signal_connect 将您的回调连接到现有信号,并使用g_signal_emit 发出已注册的信号。详情请见the documentation。

由于您有 C# 背景,您也可以考虑使用 Vala,这是一种围绕 GObject 对象系统构建的编程语言,可编译为 C,感觉类似于 C# 或 Java。

【讨论】:

实际上,我来自 C/C++ 背景 :)。我之前考虑过使用 Vala,因为我喜欢类似 C# 的语法(不必担心繁重的 .Net 框架) - 但是开发工具还没有达到标准,调试生成的 C 代码绝对是一场噩梦!跨度>

以上是关于在 C 中引发和处理事件的主要内容,如果未能解决你的问题,请参考以下文章

在多窗口 UWP 应用中引发和处理事件

MSDN搬运 之 [事件]

Qt/C++ 事件循环异常处理

处理和引发事件

在 C# 中使用弱处理程序引发 PropertyChanged 事件时发生 ExecutionEngineException

AppDomain.AssemblyLoad 事件捕获事件处理程序中引发的所有异常