我想在 main()
中启动两个子线程。但是我希望主要功能等到它们完成然后停止。否则,子线程中的变量会被清理而出错。
我的代码如下:
void textWorker(char* str, int len);
void imageWorker(char* imagepath);
int worker(char* my_str, char* path){
std::thread t1(textWorker, my_str, length);
t1.detach();
std::thread t2(imageWorker, path);
t2.detach();
return 0;
}
int main(){
char* my_str, path;
...
worker(my_str, path);
system("pause");
return 0;
}
目前,主线程将很快停止,而 t1
和 t2
将花费几秒钟。 my_str
将被清理,textWorker
将对随机字符进行操作(imageWorker
和 path
的情况类似)。
我需要将主要工作包装在一个可以被第 3 方调用的函数中(即 worker()
)。如何更正我的代码以符合我的目的?
最佳答案
您是否意识到 std::thread::detach
与您想要的完全相反?
您需要加入
它们才能获得效果:
int worker(char* my_str, char* path){
std::thread t1(textWorker, my_str, length);
std::thread t2(imageWorker, path);
t1.join();
t2.join();
return 0;
}
关于c++ - 主线程等待分离线程在 C++ 中完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30096598/