是否有可用的跨平台C信号库(更好的开源)?

时间:2011-02-23 14:49:10

标签: c windows linux cross-platform signals

我最近正在开发一个项目,我需要将部分Linux C代码移植到Windows。该代码使用Linux信号机制(我的意思是“sigaction”,“sigprocmast”等等),这在Windows上得不到很好的支持。

是否有可用的C / C ++库实现跨平台信号机制(更好的开源)?目前我只需要库来支持Linux&视窗

我认为这个问题对你来说也很有意义,因为有一天你可能会得到类似的任务。

我的一位同事告诉我,ACE是一个功能强大的库,可以完美地实现跨平台信号机制,但他说这是一个庞大的库,并且真的需要一些时间来研究它。我的项目没有给我太多时间,所以我正在努力寻找轻量级易于学习信号库。 (嗯......好吧,如果你知道的图书馆都很大,请告诉我。: - )

我已经在Google上对此主题进行了大量研究,但我无法找到我想要的内容。这是到目前为止我做了什么

  1. 在Stackoverflow.com中搜索。人们询问了很多关于如何在Linux中使用信号的细节,但似乎没有人问过跨平台信号的实现。

  2. 或者,在Stackoverflow.com中,人们问了一种叫做“信号槽”的机制。我认为这不是我需要的。

  3. 在整个谷歌搜索。我尝试了关键词“C信号”跨平台“或跨平台-game -python -gui -audio -digital -analysis -slot -image -processing -socket -time -directmedia”但找不到我想要的东西。

  4. 请帮忙!谢谢!

4 个答案:

答案 0 :(得分:3)

前段时间我已经解决了这个问题。最大的问题是在Windows上没有与信号等效的范例。它的完成方式与众不同。

我发现当我想使用 pthread 库将一些软件从Linux移植到Windows时。我很高兴发现有一个 pthread 的端口!好极了!但是他们在他们的文档中明确声明只使用信号0(IIRC)实现了pthread_kill(signal) API调用,只给出了线程的状态(例如它是否正在运行)。

当您查看可移植线程库(如boost)时,他们使用中断点来处理两个模型/范例之间的差异。

总而言之,这取决于您移植的应用程序中信号的使用方式。你肯定可以将Linux上信号处理的一些行为移植到Windows上,但你肯定无法按原样移植信号系统。

当我使用信号来中断睡眠系统调用时,我发现很难做到这一点^^

如果有解决方案,我很高兴听到其他答案^^

MY2C

答案 1 :(得分:3)

你应该看看CYGWIN。

Windows上的信号问题是它们不存在。 Windows不是POSIX,在应用程序管理方面使用了几乎完全不同的方法。它就像询问悬挂式滑翔机上火花塞的位置一样,没有任何:)

答案 2 :(得分:1)

您可以尝试使用cygwin移植您的库。有几个应用程序遵循相同的方式。

答案 3 :(得分:0)

只是做了一些研究,并在Microsoft TechNet上找到了Writing POSIX-Standard Code

我看起来它提供了一些关于什么是相似的和什么不同的更多(更长)的推理细节,以及在用于移植Unix / Linux代码的代码中可以做什么,不能做什么和做什么。

这是一组更大的信息(参见层次结构侧栏)的一部分,我没有时间浏览...

除了CYGWIN之外,还有MSYS and MinGW

社区之间似乎也存在一些摩擦(或更常见的漠不关心),很少有人跨越鸿沟。

相关问题