发布日期:2018-03-26
如何在C++中使用线程,有没有简单的例子?+ 查看更多
如何在C++中使用线程,有没有简单的例子?
+ 查看更多
发布日期:2018-02-26 15:50
分类:CPlusPlus
浏览次数:129
如何在C++中启动两个面向对象的线程?有人可以发布一个简单的例子吗?
我正在找C++线程对象,并可以扩展的方法(或类似的东西),而不是直接调用一个C语言的线程库。更新:我对操作系统没有具体的要求,希望回答的人将会回复与跨平台库的使用有关。我现在只是使问题容易理解。
我正在找C++线程对象,并可以扩展的方法(或类似的东西),而不是直接调用一个C语言的线程库。更新:我对操作系统没有具体的要求,希望回答的人将会回复与跨平台库的使用有关。我现在只是使问题容易理解。
回答:
创建一个你想要线程执行的函数。我将用一个简单的例子来演示:
void task1(std::string msg) { std::cout << "task1 says: " << msg; }
现在创建一个最终将调用上方函数的线程对象,如下所示:
std::thread t1(task1, "Hello");
你需要使用 #include 来调用 std::thread 类。如你所见,构造函数的参数是函数即将执行的线程,接下来是函数的参数。最后,将它加入到你的主线程,如下:
t1.join();
(Join()函数意味着调用新线程的线程将等待新线程执行完成,然后它将继续执行自己)
代码:
#include#include #include using namespace std; // The function we want to execute on the new thread. void task1(string msg) { cout << "task1 says: " << msg; } int main() { // Constructs the new thread and runs it. Does not block execution. thread t1(task1, "Hello"); // Makes the main thread wait for the new thread to finish execution, therefore blocks its own execution. t1.join(); }
此处更多的关于std::thread 的信息:在GCC上, 使用-std=c++0x -pthread编译。假如你的编译器支持(C++11)这一功能,那么这应该适用于任何操作系统。