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

时间:2015-05-07 09:09:36

标签: 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的类似情况)。

我需要将主要工作包装在一个可由第三方调用的函数(即worker())中。如何更正我的代码以符合我的目的?

2 个答案:

答案 0 :(得分:2)

你是否意识到std::thread::detach完全符合你的想法? 你需要join来获得影响:

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;
}

答案 1 :(得分:0)

condition_variable可以帮助您做您想做的事。

en.cppreference有一个很好的例子可以做你想做的事。