我是否总是需要加入线程?

时间:2014-02-21 19:26:00

标签: c++11

在c ++ 11中查找线程示例时,每个示例都会加入线程。

我是否需要加入主题?

更多信息
我在'游戏循环'中创建线程,因此在线程完成执行之前程序不太可能退出。线程函数完成执行后,我可以设置一个像done

这样的原子标志

例如
请在此处使用此示例.Foo仅在已加载时绘制:

struct Foo {
   std::atomic<bool> isLoaded = false;
   void load() {
        std::thread( [&isLoaded] () {
            doSomethingExpensive();
            isLoaded = true;
        });
    }
    void draw() {
        if ( !isLoaded ) { return; }
    }
}

void App::setup() {
    for ( int i = 0; i<100; ++i ) {
        std::shared_ptr<Foo> fooPtr;
        fooPtr->load();
        fooPtrs.push_back( fooPtr );
    }
}

void App::loop() {
    for ( auto &foo : fooPtrs ) {
        fooPtrs->draw();
    }
}

这是合适的/良好的做法/一个好的策略吗?

1 个答案:

答案 0 :(得分:2)

这将导致您的程序退出。当一个线程超出范围时,如果它没有被连接或分离,它将导致程序终止。你可以分离线程,但是你无法访问它。更好的解决方案是使线程成为类的成员,以便在创建它之后不会超出范围。只要你确保它被正确清理,那么就不需要加入。

相关问题