c ++线程-并行处理

| 我想知道如何在c ++中的双核处理器中执行两个进程。 我知道线程(或多线程)不是c ++的内置功能。 Qt中有线程支持,但是我从他们的参考中不了解任何内容。 :( 因此,有没有人知道初学者的简单方法。由于我在Linux上,因此跨平台支持(例如Qt)将非常有帮助。
已邀请:
尝试C ++ 0x中的多线程处理第1部分:以101作为启动线程。如果编译器不支持C ++ 0x,则继续使用Boost.Thread。
看一下Boost.Thread。这是跨平台的,是在C ++应用程序中使用的非常好的库。 您想知道什么?
如果只需要一个简单的线程库,那么POSIX线程(pthreads)库可能是最好的选择,它在Windows和Linux上都有实现。 可以找到指南这里。可以在此处下载pthread的Wi​​n32实现。 编辑:没有看到您在Linux上。在那种情况下,我不确定100%,但是我认为这些库可能已与您的GCC安装捆绑在一起。

bab

我建议改用Boost库Boost.Thread。这将包装Win32和Posix的平台详细信息,并为您提供可靠的线程和同步对象集。它也被大量使用,因此在您在SO和其他站点遇到的任何问题上寻求帮助都很容易。
您可以搜索免费的PDF图书“ C ++-GUI-Programming-with-Qt-4-1st-ed.zip \”,并阅读有关Qt中多线程的第18章。 Qt支持的并发编程功能包括(但不限于)以下各项: 互斥体 读写锁 信号 等待条件 线程特定的存储 但是,请注意以下与Qt的权衡: 性能损失vs本机线程库。自内核2.4起,POSIX线程(pthreads)就一直是Linux的本机,在所有情况下都不能替代W32API中的。 Qt中的线程间通信是通过SIGNAL和SLOT构造实现的。这些不是C ++语言的一部分,而是作为宏实现的,需要Qt提供的专有代码生成器进行完全编译。 如果可以忍受以上限制,请遵循以下使用QThread的方法: #include 从QThread派生您自己的类。您必须实现一个公共函数run(),该函数返回void以包含要执行的指令。 实例化您自己的类并调用start()以启动新线程。 Sameple代码:
#include <QtCore>

class MyThread : public QThread {
public:
    void run() {
        // do something
    }
};

int main(int argc, char** argv) {
    MyThread t1, t2;
    t1.start(); // default implementation from QThread::start() is fine
    t2.start(); // another thread
    t1.wait();  // wait for thread to finish
    t2.wait();
    return 0;
}
作为c ++ 14中的重要说明,可以使用并发线程:
#include<thread>

class Example
{
  auto DoStuff() -> std::string
  { 
    return \"Doing Stuff\";
  }

  auto DoStuff2() -> std::string
  {
    return \"Doing Stuff 2\";
  }
};

int main() 
{
  Example EO;
  std::string(Example::*func_pointer)();
  func_pointer = &Example::DoStuff;
  std::future<string> thread_one = std::async(std::launch::async, func_pointer, &EO); //Launching upon declaring

  std::string(Example::*func_pointer_2)();
  func_pointer_2 = &Example::DoStuff2;
  std::future<string> thread_two = std::async(std::launch::deferred, func_pointer_2, &EO);
  thread_two.get(); //Launching upon calling
}
std::async
std::launch::async
std::launch::deferred
)和
std::thread
都与Qt完全兼容,在某些情况下,在不同的OS环境下工作可能会更好。 对于并行处理,请参见此。

要回复问题请先登录注册