21xrx.com
2024-11-25 05:15:27 Monday
登录
文章检索 我的文章 写文章
C++中如何创建线程?
2023-07-05 06:56:18 深夜i     --     --
C++ 线程 创建

在C++中创建线程可以使用C++11标准库中的 头文件。具体的步骤如下:

1. 包含头文件

首先需要在程序中包含 头文件,一般情况下在头文件部分添加如下语句:

#include

2. 创建线程

创建线程可以使用thread类的构造函数,语法如下:

std::thread thread_object(Function, Arguments...)

其中,Function是需要并发执行的函数名称,Arguments是该函数的参数。例如:

void print_hello()

{

 std::cout << "Hello concurrent world!\n";

}

int main()

{

 std::thread t(print_hello);

 t.join();

}

上述代码中的print_hello函数就是需要并发执行的函数,使用std::thread类创建线程t,并将print_hello函数作为参数传递给了t。

在创建线程时,该线程即开始执行,但由于程序流并没有等待线程执行完毕而继续执行下去,因此最后需要使用t.join()函数等待线程执行完毕。

3. 传递参数

如果需要在创建线程时传递多个参数,可以使用std::bind和std::placeholders类。例如:

void print_int(int i)

 std::cout << "value = " << i << std::endl;

int main()

{

 std::thread t(print_int, 12);

 t.join();

}

上面的代码中,print_int函数需要传递一个int类型的参数,使用std::thread类创建线程时直接将参数12传递给了print_int函数。如果需要传递多个参数,可以使用std::bind和std::placeholders类,例如:

void print_sum(int a, int b)

{

 std::cout << "sum = " << a+b << std::endl;

}

int main()

{

 std::thread t(print_sum, 2, 3);

 t.join();

}

上述代码中需要传递两个int类型的参数,使用std::bind函数绑定参数后再传递给print_sum函数,具体语法如下:

std::thread t(std::bind(print_sum, 2, 3));

4. 线程的状态

在C++11标准库中,可以通过std::thread类的成员函数来获取线程的状态,例如:

std::thread t(print_hello);

if (t.joinable())

{

  t.join();

}

else

  std::cout << "Thread is not joinable" << std::endl;

上述代码中,使用t.joinable()函数查询线程t是否可加入(joinable),若可加入则调用t.join()等待线程执行完毕,若不可加入则输出线程不可加入的提示。

通过使用C++11标准库中的 头文件,我们可以轻松地在C++程序中创建线程,并实现并发执行。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复