我想知道如何在C++中的雙核處理器中執行兩個進程。我知道線程(或多線程)不是C++的內置功能。C++線程 - 並行處理
在Qt中有線程支持,但我從他們的參考文獻中不能理解任何東西。 :(
因此,沒有人知道對於初學者做一個簡單的方法。跨平臺支持(如QT),因爲我在Linux將是非常有益的。
我想知道如何在C++中的雙核處理器中執行兩個進程。我知道線程(或多線程)不是C++的內置功能。C++線程 - 並行處理
在Qt中有線程支持,但我從他們的參考文獻中不能理解任何東西。 :(
因此,沒有人知道對於初學者做一個簡單的方法。跨平臺支持(如QT),因爲我在Linux將是非常有益的。
看看Boost.Thread。這是跨平臺的,是一個非常好的庫,可用於C++應用程序。
您特別想知道什麼?
我建議使用Boost庫Boost.Thread來代替。這將包裝Win32和Posix的平臺特性,併爲您提供一套可靠的線程和同步對象。這也是非常繁重的用途,所以尋找SO和其他網站遇到的任何問題的幫助很容易。
嘗試Multithreading in C++0x part 1: Starting Threads爲101。如果編譯器沒有C++0x支持,那麼留在Boost.Thread
您可以搜索一個免費的PDF書籍「C++ - GUI編程與 - 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;
}
在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完全兼容,並且在某些情況下可能是b在不同的操作系統環境中工作。
對於並行處理,見this。
+1:這包含在C++ 0x中,所以它也應該是面向未來的。 – rubenvb 2011-04-19 12:36:50