我最近正在开发一个项目,在这个项目中我需要将一部分Linux C代码移植到Windows。 代码使用Linux信号机制(我的意思是“sigaction”,“sigprocmast”等),这在Windows上不太受支持。
是否有可用的C / C ++库实现跨平台的信号机制(更好的开放源代码)? 目前我只需要该库来支持Linux和Windows 。
我想这个问题对你来说也是有道理的,因为你有一天可能会得到类似的任务。
我的一位同事告诉我,ACE是一个function强大的图书馆,它完美地实现了跨平台的信号机制,但是他说这是一个庞大的图书馆,真的需要一些时间去研究它。 我的项目没有给我太多的时间,所以我试图寻找一个轻量级 , 易于学习的信号库。 (呃..好,如果你知道的图书馆都很大,请告诉我。:-)
我已经用Google做了很多关于这个主题的研究,但是我找不到我想要的。 这是我迄今为止所做的 :
在Stackoverflow.comsearch。 人们问了很多关于如何在Linux中使用信号的细节,但似乎没有人询问跨平台信号的实现。
或者,在Stackoverflow.com,人们问一个叫做“signal-slot”的机制。 我不认为这是我所需要的。
search整个谷歌。 我尝试了关键词“C信号”跨平台“或跨平台游戏-python-gui -audio -digital-分析-slot -image -processing -socket-time -directmedia”,但找不到我想要的。
请帮忙! 谢谢!
你可以尝试使用cygwin移植你的库。 有几个应用程序遵循相同的方式。
前段时间我已经解决了这个问题。 最大的问题是在窗口上没有与信号等效的范例。 它的做法是完全不同的。
我发现当我想使用pthread库将某些软件从Linux移植到Windows时。 我很高兴发现有一个pthread的端口! 太好了! 但是他们在他们的文档中明确声明只使用信号0(IIRC)实现了pthread_kill(signal)
API调用,只给出线程的状态(例如它正在运行或不运行)。
当你查看可移植的线程库(像boost),他们使用中断点来处理两个模型/范例之间的差异。
总而言之,这取决于您在移植的应用程序中如何使用信号。 您肯定可以将一些在Linux上的信号处理的行为移植到窗口,但是您当然不能按原样移植信号系统。
而且我发现,当你使用信号中断睡眠系统调用^^时,很难做到这一点
如果有解决方案,我很高兴听到其他答案^^
MY2C
你应该看看CYGWIN。
Windows上的信号问题是它们不存在。 Windows不是POSIX,在应用程序管理方面使用几乎完全不同的方法。 它就像问火星塞在滑翔机上的位置,没有任何:)
只是做了一些研究,发现在Microsoft TechNet上编写POSIX标准代码 。
我看起来像是给出了一些关于什么是类似的,什么是不同的推理细节,以及在移植Unix / Linux代码的代码中可以做什么,不能做什么。
它是一个更大的一套信息的一部分(见层次结构边栏),我没有时间去浏览…
除了CYGWIN外,还有MSYS和MinGW 。
社区之间似乎也有一些摩擦(或者更多的是冷漠),很少有人跨越这个鸿沟。