5

我需要编写一个使用线程和套接字的程序。对于不同的平台(Linux、Windows、Mac),最好的方法是什么。

我知道 POSIX,但 Win 上没有 POSIX。

是否有任何库以独立于平台的方式处理它?

4

6 回答 6

5

如果你真的想要 C(不是 C++),我建议在非 Windows 平台上使用标准的 POSIX 线程,在 Windows 上使用pthreads-win32。它支持 32 位和 64 位,MSVC 和 MinGW。它的当前版本(2.9.1)仅在一个月前发布,因此该项目正在积极维护中。在 github上还有一个fork,在 MSVC2010 项目中有一些修复。

如果 C++ 也是一个选项,我会选择 boost,因为它是标准 c++ 发展的地方(std::threadc++11 中的设计是从 等演变而来boost::thread

对于您问题的网络部分,boost::asio如果 C++ 适合您,那么它是最佳选择,否则在 C 中看不到任何可比性。特别是Windows 上的boost::asio支持I/O Completion Ports (IOCP),这对性能至关重要。boost::asio需要一些时间来学习,但在我个人看来,花每一分钟阅读文档(这很棒)和使用示例都是值得的。

于 2012-06-24T12:37:27.733 回答
1

您可以尝试使用Qt (C++) 作为包装器,它具有用于线程和网络的跨平台库;除非你的项目必须是 100% C.

于 2012-06-24T12:01:00.733 回答
1

您可以使用boost (C++):asio - 用于异步输入输出,threads - 用于平台独立线程

于 2012-06-24T12:02:10.500 回答
1

新的 C 标准 C11 带有线程支持。AFAIK 目前还没有 C11,但是有线程部分的实现(包装器)。在 POSIX 系统上,您可以在 pthread 上使用我在P99中的包装器,这应该为您提供 Linux 和 Mac。在 Windows 系统上,至少有来自 Dinkumware 的参考实现,它产生了标准中定义的 API。

使用 C11 将为您提供“面向未来”的统一线程 API。

对于socket,我的印象是BSD的socket接口在windows中也是比较直接的提供,但是我没有在那个平台上编程的经验。

于 2012-06-24T13:20:59.403 回答
0

在 codeproject 上有一个称为 XP 线程的 C++ 类。 http://www.codeproject.com/Articles/15983/Cross-Platform-Threads
您需要将 ifdef 从 mach 更改为 ifndef win32/64

我将它用于我的 OpenArena 瞄准机器人,教程包括修改后的 XP-Threads 类: http ://aimbots.net/tutorials/19992-audio-killspam.html

您需要做的就是对它进行去“分类”以便在 C 中使用。

你可以在这里看到最终结果,顺便说一句:)
http://www.youtube.com/watch?v=nyJ8aM52ykE

于 2012-06-24T12:10:12.903 回答
-1

对于 Windows,您可以使用 Win32 的 CreateThread API: http: //msdn.microsoft.com/en-us/library/kdzttdcb (v=vs.71).aspx

于 2012-06-24T12:13:08.060 回答