c++启动一个新线程 引用传参例子
时间: 2024-03-27 07:37:15 浏览: 13
以下是一个C++启动新线程并使用引用传参的例子:
```cpp
#include <iostream>
#include <thread>
void threadFunction(int& num) {
std::cout << "Thread function started" << std::endl;
num *= 2; // 修改传入的参数
}
int main() {
int num = 10;
std::thread t(threadFunction, std::ref(num)); // 使用std::ref将num作为引用传递给线程函数
std::cout << "Main thread started" << std::endl;
t.join();
std::cout << "The value of num is " << num << std::endl;
return 0;
}
```
在上面的例子中,我们定义了一个带有一个引用参数的线程函数`threadFunction`。在`main`函数中,我们定义了一个整数变量`num`,并将其作为引用传递给线程函数`t`,使用`std::ref`将其转换为引用类型。在线程函数中,我们将参数`num`乘以2,然后`main`函数等待线程`t`完成并打印`num`的值。
请注意,使用引用传递参数时,必须确保在线程结束之前不会销毁传递的参数。在上面的例子中,我们使用`t.join()`等待线程`t`完成后,才打印`num`的值。
相关问题
使用c++ 写一个多线程例子
以下是一个使用C++11写的简单的多线程例子,该例子创建了两个线程,每个线程分别打印出自己的线程ID和打印信息:
```cpp
#include <iostream>
#include <thread>
// 线程函数1
void threadFunc1()
{
std::cout << "Thread1 ID: " << std::this_thread::get_id() << std::endl;
std::cout << "Thread1: Hello, world!" << std::endl;
}
// 线程函数2
void threadFunc2()
{
std::cout << "Thread2 ID: " << std::this_thread::get_id() << std::endl;
std::cout << "Thread2: Hello, world!" << std::endl;
}
int main()
{
// 创建线程1
std::thread t1(threadFunc1);
// 创建线程2
std::thread t2(threadFunc2);
// 等待线程1和线程2执行完毕
t1.join();
t2.join();
return 0;
}
```
在该例子中,我们定义了两个线程函数`threadFunc1`和`threadFunc2`,分别创建了两个线程`t1`和`t2`。在每个线程函数中,我们使用`std::this_thread::get_id()`函数来获取当前线程的ID,然后打印出当前线程的ID和打印信息。在主函数中,我们使用`t1.join()`和`t2.join()`等待线程1和线程2执行完毕,然后程序退出。
该例子比较简单,但可以帮助你了解如何使用C++11编写多线程程序。当然,在实际开发中,需要注意线程同步、线程安全等问题。
使用C++ 写一个多线程例子
以下是一个使用C++11写的简单的多线程例子,该例子创建了两个线程,每个线程分别打印出自己的线程ID和打印信息:
```cpp
#include <iostream>
#include <thread>
// 线程函数1
void threadFunc1()
{
std::cout << "Thread1 ID: " << std::this_thread::get_id() << std::endl;
std::cout << "Thread1: Hello, world!" << std::endl;
}
// 线程函数2
void threadFunc2()
{
std::cout << "Thread2 ID: " << std::this_thread::get_id() << std::endl;
std::cout << "Thread2: Hello, world!" << std::endl;
}
int main()
{
// 创建线程1
std::thread t1(threadFunc1);
// 创建线程2
std::thread t2(threadFunc2);
// 等待线程1和线程2执行完毕
t1.join();
t2.join();
return 0;
}
```
在该例子中,我们定义了两个线程函数`threadFunc1`和`threadFunc2`,分别创建了两个线程`t1`和`t2`。在每个线程函数中,我们使用`std::this_thread::get_id()`函数来获取当前线程的ID,然后打印出当前线程的ID和打印信息。在主函数中,我们使用`t1.join()`和`t2.join()`等待线程1和线程2执行完毕,然后程序退出。
该例子比较简单,但可以帮助你了解如何使用C++11编写多线程程序。当然,在实际开发中,需要注意线程同步、线程安全等问题。