2011-02-23 67 views
5

我最近正在開發一個項目,我需要將一部分Linux C代碼移植到Windows。代碼使用Linux信號機制(我的意思是「sigaction」,「sigprocmast」等),這在Windows上不太受支持。是否有可用的跨平臺C信號庫(更好的開放源代碼)?

是否有可用的C/C++庫實現跨平臺信號機制(更好的開源)?目前我只需要庫到支持Linux & Windows

我認爲這個問題對你也有意義,因爲你有可能會在某天得到類似的任務。

我的一位同事告訴我,ACE是一個功能強大的庫,它完美地實現了跨平臺的信號機制,但他說這是一個龐大的庫,需要一些時間來研究它。我的項目不給我太多時間,所以我試圖尋找一個輕量級易於學習信號庫。 (嗯..好吧,如果你知道的圖書館都很大,請告訴我:-)

我已經用Google做了很多關於這個主題的研究,但是我找不到我想。這裏是什麼我迄今所做:搜索在Stackoverflow.com

  1. 。人們問了很多關於如何在Linux中使用信號的細節,但沒有人會問關於跨平臺信號實現的問題。

  2. 或者,在Stackoverflow.com,人們問了一個叫做「signal-slot」的機制。我不認爲這是我需要的。

  3. 搜索整個谷歌。我嘗試了關鍵詞「C信號」跨平臺「或跨平臺遊戲-python-gui -audio -digital -analysis -slot -image -processing -socket-time -directmedia」但找不到我想要的東西。

請幫忙!謝謝!

+0

http://mao-yu.com/notes/sys_signal/上有一個關於實現其中一個信號的小記錄。 – vissi 2011-02-23 14:59:00

+0

@vissi:很好的鏈接。不幸的是,它只是處理Ctrl-C(SIGINT)信號。 Windows沒有直接映射到Posix信號AFAIK。 – neuro 2011-02-23 15:06:44

+0

@vissi:謝謝,vissi,但是我發現了這個鏈接,它對我沒有太大的幫助。但是,謝謝你們一樣:-) – yaobin 2011-02-24 10:27:05

回答

1

你可以嘗試使用cygwin移植你的庫。有幾種應用程序遵循相同的方式。

3

我前段時間討論過這個問題。最大的問題是在窗口上沒有與信號等效的範例。它的做法完全不同。

我發現,當我想將一些軟件從Linux移植到windows時使用pthread庫。我很高興地發現有一個端口pthread!太好了!但是他們在他們的文檔中明確聲明只使用信號0(IIRC)實現了pthread_kill(signal) API調用,只給出線程的狀態(例如它正在運行或不運行)。

當你看看可移植線程庫(如boost)時,他們使用中斷點來處理兩個模型/範例之間的差異。

總之,這取決於您在移植的應用程序中如何使用信號。您肯定可以將某些由Linux上的信號處理的行爲移植到窗口中,但是您當然不能按原樣移植信號系統。

而且我發現硬盤的方式,這是不容易做到的,當你使用信號中斷睡眠系統調用^^

如果有一個解決方案,我很高興從其他的答案聽到^^

my2c

+1

+1。不同的平臺以不同的方式做事Windows不是Unix;差遠了。 – Luke 2011-02-23 15:30:30

+0

@luke:是的,信號是核心區別之一,尤其是關於系統調用中斷的問題。 – neuro 2011-02-23 15:42:01

+0

我同意以「按原樣」方式移植信號相當困難。我想我會嘗試將行爲移植到Windows。 – yaobin 2011-02-24 10:35:41

3

您應該看看CYGWIN。

Windows上的信號問題是它們根本不存在。 Windows不是POSIX,在應用程序管理方面使用幾乎完全不同的方法。它就像問火星塞在滑翔機上的位置,沒有任何:)

0

只是做了一些研究,發現微軟TechNet上的Writing POSIX-Standard Code

我看起來像它提供了一些關於類似和不同的推理細節,以及在移植Unix/Linux代碼的代碼中可以做什麼,不能做什麼。

這是一個更大的集信息的一部分,我還沒來得及甚至瀏覽(見層次邊欄)...

CYGWIN之外,還有MSYS and MinGW

社區之間似乎也存在一些摩擦(或者更常見的是漠不關心),很少有人跨越鴻溝。