从哪里开始使用c ++进行多线程编程?

时间:2010-06-15 01:13:27

标签: c++ multithreading

我正在尝试将我自己的IRC客户端作为个人项目实现,我意识到我需要一种同时从套接字读取和写入的方法。我意识到我可以有一个读取线程,它在后台从套接字读取并将数据放入队列中,我可以有另一个线程将数据从队列写入套接字。但是我不知道如何开始使用多线程编程或如何使用c ++。我从哪里开始?

5 个答案:

答案 0 :(得分:10)

对于C ++线程,boost::thread(这是即将到来的std::thread的基础)是最好的方法。也就是说,虽然线程可能是针对您的特定情况的正确解决方案,但我只是想把它扔到那里select和非阻塞套接字是交错读取/写入和写入多个套接字的常用方法对线程的需求。 boost::asio库以跨平台,C ++方式包装选择和非阻塞套接字的功能。

答案 1 :(得分:5)

它特定于C和* nix,但我想不出一个比Beej's Guide to Network Programming更好的起点。 “你会向指示我的绝地大师学习。”

您将学习读取和写入套接字的基础知识,更重要的是,多线程不一定是正确的答案。

答案 2 :(得分:3)

我建议使用Qt Threading。几乎每个功能都有非常出色的示例代码。此外,它们现在已获得LGPL许可,并将在大多数平台上运行,并包含二进制文件的源代码。他们也有非常好的网络支持。

无论您选择何种方式,请确保他们拥有良好的文档和样本

答案 3 :(得分:0)

我建议查看POCO个库。在我看来,他们更容易接受而不是提升和拥有优秀的文档。这些库为编写多线程网络代码提供了很好的框架。你可以从他们身上学到很多东西,然后快速起步和跑步。

答案 4 :(得分:0)

我建议ACE。它具有许多操作系统函数(* nix,Windows等)的可移植抽象:BSD套接字,线程,互斥锁,信号量等 - 在任何地方编写一次编译(参见ACE的ACE_OS namespace)。 / p>

你可以使用很多的网络应用程序模式(ACE_Reactor一开始会很好)但是你可以使用BSD函数的可移植抽象(socket,send,recv,close,选择 - 它们对你的IRC客户来说已经足够了)

如前所述boost也是一个选项,通常是任何跨平台库,为每个操作系统提供可移植的抽象(我可以想到wxWidgets,{{3对于图形部分 - 如果你想这样做。)

一个建议:不要使用线程,除非你真的需要。它们并不像看起来那么容易。

当提到网络通信时,我相信你想要做的事情很容易在单线程应用程序中实现(ACE_Reactor在这里帮助你很多,但你可以自由使用BSD套接字函数)。首先了解套接字如何工作,然后 - 如果你想 - 了解反应堆如何在其网络应用程序模式中使用套接字(qtACE_Reactor对象一起工作)。

希望它有所帮助!