c++ - 主线程等待分离线程在 C++ 中完成?

标签 c++ multithreading

我想在 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;
}

目前,主线程将很快停止,而 t1t2 将花费几秒钟。 my_str 将被清理,textWorker 将对随机字符进行操作(imageWorkerpath 的情况类似)。

我需要将主要工作包装在一个可以被第 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/

相关文章:

c++ - C++ 中复杂用户定义类型的 RVO

python - 如何将函数和参数放入 python 队列?

c# - 在我的多线程应用程序失败后,未完成的线程是否会挂起?

python - 线程池执行器 : how to limit the queue maxsize?

java - 在 Java 程序中通过 UDP 接收 C++ 字节流

c++ - 创建多线程服务器的问题

c++ - 如何在C++中获得Antlr 4规则名称?

java - 如何使用多个线程而不是顺序调用方法

c - pthread_join() 的使用

C++ - Mysql 连接器