#include <chrono>
#include <iostream>
#include <string>
#include <thread>
using namespace std;
void download(string file) {
for (int i = 0; i < 10; i++) {
cout << "Downloading " << file << " (" << i * 10 << "%)..." << endl;
this_thread::sleep_for(chrono::milliseconds(400));
}
cout << "Download complete: " << file << endl;
}
void interact() {
string name;
cin >> name;
cout << "Hi, " << name << endl;
}
int main() {
// 开启一个子线程
thread t1([&] { download("hello.zip"); });
// 主线程阻塞等待输入
interact();
// t1执行结束前主线程不结束。
t1.join();
return 0;
}
在函数或方法中开启子线程
void myfunc(){
thread t1([&] { download("hello.zip"); });
t1.detach(); // 当函数执行结束时,函数中的对象会被销毁,detach()防止子线程被销毁
}
// 全局线程池
vector<thread> pool;
void myfunc() {
thread t1([&] { download("hello.zip"); });
// 将t1添加到全局线程池中,以延长t1的生命周期
pool.push_back(move(t1));
}
int main() {
myfunc();
interact();
// 遍历线程池
for (auto &t : pool)
t.join();
return 0;
}
class ThreadPool {
public:
void push_back(thread t) { pool.push_back(move(t)); }
~ThreadPool() {
// 对象遍历线程池
for (auto &t : pool)
t.join();
}
};
ThreadPool tpool;
void myfunc() {
thread t1([&] { download("hello.zip"); });
// 将t1添加到全局线程池中,以延长t1的生命周期
tpool.push_back(move(t1));
}
int main() {
myfunc();
interact();
return 0;
}