📅  最后修改于: 2023-12-03 15:13:59.430000             🧑  作者: Mango
在C++中,可以使用系统提供的线程库来创建线程,实现多任务处理的效果。本文将介绍C++创建线程的方法和示例代码。
C++标准库中提供了线程库<thread>
,可以用来创建和管理线程。使用前需包含头文件<thread>
。
创建线程需要使用线程库提供的类std::thread
,将需要执行的函数作为参数传入。
#include <iostream>
#include <thread>
void testingFunction() {
std::cout << "This is a test." << std::endl;
}
int main() {
std::thread testThread(testingFunction);
testThread.join();
return 0;
}
上述代码中,testingFunction
函数被定义为线程执行的任务,使用std::thread
创建线程,并将testingFunction
传入。testThread.join()
是等待线程执行完毕的方法。
如果任务函数需要传入参数,可以将参数作为参数传入线程。
#include <iostream>
#include <thread>
void testingFunction(int arg1, int arg2) {
int result = arg1 + arg2;
std::cout << "The result is: " << result << std::endl;
}
int main() {
std::thread testThread(testingFunction, 2, 3);
testThread.join();
return 0;
}
上述代码中,testingFunction
函数接收两个参数,并将参数相加输出结果。线程创建时,将两个参数一起传入。
如果任务函数有返回值,则需要使用std::promise
和std::future
来传递返回值。
#include <iostream>
#include <thread>
#include <future>
void testingFunction(std::promise<int> promiseObj, int arg1, int arg2) {
int result = arg1 + arg2;
promiseObj.set_value(result);
}
int main() {
std::promise<int> promiseObj;
std::future<int> futureObj = promiseObj.get_future();
std::thread testThread(testingFunction, std::move(promiseObj), 2, 3);
int result = futureObj.get();
std::cout << "The result is: " << result << std::endl;
testThread.join();
return 0;
}
上述代码中,使用std::promise<int>
创建一个可以传递int类型返回值的promise对象,并使用std::future<int>
获取返回值。被线程执行的函数testingFunction
需要传入promiseObj
并返回结果,promiseObj.set_value(result)
将结果存储在promise中,std::future<int> futureObj = promiseObj.get_future();
将promise的返回值与future绑定。执行int result = futureObj.get();
即可获取结果。