Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中以独立于平台的方式使用线程和套接字_C_Multithreading_Sockets - Fatal编程技术网

在C中以独立于平台的方式使用线程和套接字

在C中以独立于平台的方式使用线程和套接字,c,multithreading,sockets,C,Multithreading,Sockets,我需要写一个使用线程和套接字的程序。对于不同的平台(Linux、Windows、Mac),最好的方法是什么 我知道POSIX,但没有POSIX的赢家 有没有以平台无关的方式处理的库?您可以尝试使用(C++)作为包装器,它有跨平台的线程库和网络库;除非你的项目必须是100% C.< /P> < P>你可以使用 Booost >(C++):-对于一个非同步输入输出,对于平台无关线程< P>有一个C++类,叫做CXProject上的XP线程。 您需要将ifdef从mach更改为ifndef win3

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

我知道POSIX,但没有POSIX的赢家


有没有以平台无关的方式处理的库?

您可以尝试使用(C++)作为包装器,它有跨平台的线程库和网络库;除非你的项目必须是100% C.< /P> < P>你可以使用<强> Booost >(C++):-对于一个非同步输入输出,对于平台无关线程

< P>有一个C++类,叫做CXProject上的XP线程。
您需要将ifdef从mach更改为ifndef win32/64

我将其用于我的OpenArena aimbot,教程包括修改的XP Threads类:

你所需要做的就是去“分类”它以便在C中使用

您可以在这里看到最终结果,顺便说一句:)

对于Windows,您可以使用Win32的CreateThread API:

如果您确实需要C(而不是C++),我建议在非Windows平台上使用标准POSIX线程,并在Windows上使用。它支持32位和64位,包括MSVC和MinGW。它的当前版本(2.9.1)仅在一个月前发布,因此项目得到了积极维护。在MSVC2010项目中也有一些修复程序

<> P>如果C++也是一个选项,我会选择Boost,因为它是标准C++的发展方向(C++中的代码> STD::线程< /代码>的设计是从代码> Boo::线程< /代码>等的演变)


<对于您的问题的网络部分,<代码> Boo::ASIO < /C>是C++的最佳选择,否则在C中没有任何可比的,特别是 Booo::ASIO 支持Windows上的代码> I/O完成端口(IOCP)< /C> >,这对于性能至关重要。asio需要一些时间来学习,但在我个人看来,花每一分钟阅读文档(非常好)和使用示例是值得的。

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

使用C11将为您提供一个“经得起未来考验”的统一线程API


对于套接字,我的印象是BSD套接字接口在Windows中也相对直接地提供,但是我没有在那个平台上编程的经验。

他说C,而不是C++。否则,boost就可以了。