我想知道如何在c ++中的双核处理器中执行两个进程。
我知道线程(或多线程)不是c ++的内置功能。</ p>
Qt中有线程支持,但我从他们的参考资料中得不到任何理解。 :(
那么,有没有人知道初学者这么做的简单方法。跨平台支持(如Qt)将非常有用,因为我在Linux上。
答案 0 :(得分:5)
尝试将Multithreading in C++0x part 1: Starting Threads作为101.如果您的编译器没有C++0x支持,请继续使用Boost.Thread
答案 1 :(得分:3)
看看Boost.Thread。这是跨平台的,是在C ++应用程序中使用的非常好的库。
您有什么具体想知道的?
答案 2 :(得分:2)
POSIX线程(pthreads)库可能是你最好的选择,如果你只需要一个简单的线程库,它在Windows和Linux上都有实现。
可以找到指南,例如here。可以下载here。{/ p>的pthreads的Win32实现
编辑:没看到你在Linux上。在那种情况下,我不是100%肯定,但我认为这些库可能已经与您的GCC安装捆绑在一起。
答案 3 :(得分:2)
我建议使用Boost库Boost.Thread。这将包装Win32和Posix的平台细节,并为您提供一组可靠的线程和同步对象。它的使用非常频繁,因此在SO和其他网站上遇到的任何问题都可以找到帮助。
答案 4 :(得分:1)
您可以搜索免费的PDF手册“C ++ - GUI-Programming-with-Qt-4-1st-ed.zip”,并阅读第18章关于Qt中的多线程。
Qt支持的并发编程功能包括(不限于)以下内容:
但是,请注意以下与Qt的权衡:
如果您可以忍受上述限制,请按照以下方法使用QThread:
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;
}
答案 5 :(得分:1)
作为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完全兼容,在某些情况下可能更适合在不同的操作系统环境中工作。
对于并行 处理,请参阅this。