我想在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
的类似情况)。
我需要将主要工作包装在一个可由第三方调用的函数(即worker()
)中。如何更正我的代码以符合我的目的?
答案 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有一个很好的例子可以做你想做的事。