qt支持c++11需要添加
QMAKE_CXXFLAGS += -std=c++0x
CONFIG += C++11
1.放入函数
#include <iostream>
#include <thread>
#include <chrono>
void threadFunc(int num) {
for (auto i = 0; i < num; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "thread id: " << std::this_thread::get_id()
<< " num: " << i << std::endl;
}
}
int main()
{
std::thread t(threadFunc, 5);
if (t.joinable()) t.join();
std::cout << "main end." << std::endl;
return 0;
}
2.放入仿函数
#include <iostream>
#include <thread>
#include <chrono>
class Demo
{
public:
void operator()(int num) {
this->threadFunc(num);
}
private:
void threadFunc(int num) {
for (auto i = 0; i < num; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "thread id: " << std::this_thread::get_id()
<< " num: " << i << std::endl;
}
}
};
int main()
{
std::thread t(Demo(), 5);
if (t.joinable()) t.join();
std::cout << "main end." << std::endl;
return 0;
}
3. 放入对象
#include <iostream>
#include <thread>
#include <chrono>
class Demo
{
public:
void operator()(int num) {
this->threadFunc(num);
}
private:
void threadFunc(int num) {
for (auto i = 0; i < num; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "thread id: " << std::this_thread::get_id()
<< " num: " << i << std::endl;
}
}
};
int main()
{
Demo d;
std::thread t(d, 5);
if (t.joinable()) t.join();
std::cout << "main end." << std::endl;
return 0;
}
4.放入成员函数
#include <iostream>
#include <thread>
#include <chrono>
class Demo
{
public:
void threadFunc(int num) {
for (auto i = 0; i < num; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "thread id: " << std::this_thread::get_id()
<< " num: " << i << std::endl;
}
}
};
int main()
{
Demo d;
std::thread t(&Demo::threadFunc, &d,5);
if (t.joinable()) t.join();
std::cout << "main end." << std::endl;
return 0;
}
5. 类内使用
#include <iostream>
#include <thread>
#include <chrono>
class Demo
{
public:
void run(int num) {
std::thread t(&Demo::threadFunc, this, num);
if (t.joinable()) t.join();
}
private:
void threadFunc(int num) {
for (auto i = 0; i < num; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "thread id: " << std::this_thread::get_id()
<< " num: " << i << std::endl;
}
}
};
int main()
{
Demo d;
d.run(5);
return 0;
}
6.使用lambda表达式
#include <iostream>
#include <thread>
#include <chrono>
int main()
{
int num = 5;
std::thread t([=]() {
for (auto i = 0; i < num; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "thread id: " << std::this_thread::get_id()
<< " num: " << i << std::endl;
}
});
if (t.joinable()) t.join();
return 0;
}