阻塞主线程以等待其子线程

双面

所以我有这个课:

class foo {
public:
        foo() { };
        void me1() const {
            while(1) {
                std::lock_guard<std::mutex> ldock(m);
                std::cout << 0;
            }
        }
        void me2() const {
            while(1) {
                std::lock_guard<std::mutex> ldock(m);
                std::cout << 1;
            }
        }
private:
    std::mutex m;
};

现在,我想在两个不同的线程中运行这两个方法,我这样做是这样的:

int main() {

    foo myfoo;

    std::thread firstThread(&foo::me1, &myfoo);
    std::thread secondThread(&foo::me2, &myfoo);

    firstThread.detach();
    secondThread.detach();

    //while(1) { }

    return 0;
}

我不想等待这两种方法中的任何一种完成,它们将同时运行,直到主线程被杀死。

在主线程末尾有某种无限循环可以吗?(如评论while(1) {})。

还是应该调用某种sleep函数?

迪特玛·库尔(DietmarKühl)

如果你想确定这两个线程完成你最好的选择实际上是没有detach()线程,而是join()他们在离开主线程之前。也就是说,您将同时启动两个线程,并且它们将同时运行,一旦启动您就简单地将join()每个线程启动当然,这假定线程将终止。

detach()有效拥有ed线程意味着您永远无法确定它是否已完成。这通常是很少有用,我认为这是一个错误的detach()加入std::thread但是,即使使用detach()ed线程,您无需忙碌就可以识别何时实现目标。为此,您需要设置适当的变量来指示完成情况或进度,并使用来保护它们std::mutex主线程将随后wait()std::condition_variable其被notify_once()用在完成/进度更新相应的线程将要在合理的时间间隔进行编。一旦所有线程都表明它们已经完成或达到了适当的目标,main()线程就可以完成。

通常,单独使用计时器不是一个好的方法。线程之间的信令通常是更可取的,并且倾向于创建一个更响应的系统。您仍然可以使用wait()wait_until()wait_for()的定时版本,例如,在怀疑线程以某种方式挂起或超时时发出警报。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NSoperationQueue阻塞主线程

来自分类Dev

pyqt QThread阻塞主线程

来自分类Dev

NSThread sleepfortimeinterval阻塞主线程

来自分类Dev

飞镖未来阻塞主线程

来自分类Dev

EXIF 的 PHContentEditingInputRequestOptions 阻塞主线程

来自分类Dev

等待后线程被阻塞

来自分类Dev

在等待另一个线程完成工作时取消阻塞主线程

来自分类Dev

在等待另一个线程完成工作时取消阻塞主线程

来自分类Dev

等待导致主线程挂起?

来自分类Dev

主线程等待其他线程

来自分类Dev

主线程等待其他线程

来自分类Dev

使我的线程等待而不阻塞子线程

来自分类Dev

等待是否完全阻塞线程?

来自分类Dev

在整个循环完成之前,在for循环内等待是否会阻塞主线程?

来自分类Dev

调用MEX函数而不阻塞主线程

来自分类Dev

MVC Ajax请求而不阻塞主线程

来自分类Dev

Android,Volley Request,响应阻塞了主线程

来自分类Dev

为什么ForkJoinPool ::的invoke()阻塞主线程?

来自分类Dev

KafkaProducer刷新不会阻塞主线程

来自分类Dev

如何确定什么阻塞了主线程

来自分类Dev

Renderscript ScriptC 编译阻塞主线程

来自分类Dev

从磁盘加载许多 UIImages 阻塞主线程

来自分类Dev

python多处理池阻塞主线程

来自分类Dev

iOS 12.2:CMMotionManager 阻塞主线程

来自分类Dev

如何在Haskell中强制主线程等待其所有子线程完成

来自分类Dev

如何在MFC中停止主线程和等待子线程

来自分类Dev

如何在MFC中停止主线程和等待子线程

来自分类Dev

无线程阻塞的主线程回调(Java)

来自分类Dev

等待关键字阻止主线程