在C ++中,我有这个示例实现:
#include <thread>
#include <iostream>
void doSomeWork( void )
{
std::cout << "hello from thread..." << std::endl;
while(true)
{
printf("Getting inside doSomeWork\n");
sleep(1);
}
}
int main( int argc, char *argv[] )
{
std::thread t( doSomeWork );
t.join();
processing();
return 0;
}
void processing()
{
while(true)
{
printf("Getting inside processing\n");
sleep(1);
}
}
我遇到一个问题,即doSomeWork()继续做事并阻止处理()。我认为线程是异步的,所以当它正在睡觉时,我可以做其他事情。我的问题是如何在doSomeWork()中生成并生成其他线程,然后恢复doSomework()?
答案 0 :(得分:6)
该行
t.join();
暂停调用线程,直到线程t
完成(doSomeWork()
)返回。
将您的代码更改为
std::thread t( doSomeWork );
processing();
t.join();
如果您希望processing()
和doSomeWork()
并行运行。
答案 1 :(得分:2)
将t.join();
替换为t.detach();
但请注意,detach
表示“我在此线程中没有兴趣,因此可以随时终止”或“我将通过某种同步机制同步线程”。基本上,当你有一些外部(线程)同步机制,因此你不想使用连接时使用它。通常每次都使用join
,但仅在需要时使用detach
。在您的特定情况下,您具有永久循环的同步机制,因此使用detach
绝对可以,但要注意它们的差异。