1

在 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() 继续做事,它阻塞了 processing()。我认为线程是异步的,所以当它在睡觉时,我可以做其他事情。我的问题是如何在 doSomeWork() 中睡觉并产生其他线程,然后恢复 doSomework()?

4

2 回答 2

6

线

t.join();

暂停调用线程,直到线程t完成(何时doSomeWork())返回。

将您的代码更改为

std::thread t( doSomeWork );
processing();
t.join();

如果你想processing()并行doSomeWork()运行。

于 2013-02-22T15:22:36.607 回答
2

替换 t.join();t.detach();

但是请注意,它的detach意思是“我对这个线程不感兴趣,所以它可能随时终止”或“我将通过某种同步机制同步线程”。基本上,当您有一些外部(线程)同步机制时使用它,因此您不想使用连接。join每次都使用很常见,但detach仅在需要时使用。在您的特定情况下,您具有永远循环的同步机制,因此使用绝对没问题,detach但请注意它们的差异。

于 2013-02-22T15:24:13.373 回答