如何检测std::线程以异步方式终止?

How can I detect std::thread was terminated as async?

本文关键字:线程 异步 方式 终止 std 何检测 检测      更新时间:2023-10-16

我是一名Java工程师,但我需要将我的Java代码迁移到c++。

在c++:

void foo(){
    thread t(&loading_function);
    t.detach();
}
void loading_function(){
    while(true){
    //..some loading operations
    }
}
//I want to call after loading_function NOT in main thread like t.join();
void loading_after(){  
    //..loading after handling
}

我想在线程t结束后处理。

像这样的Java代码:

public class Test implements Runnable{
    public void foo(){
        Thread loading_thread = new Thread(this);
        loading_thread.start();
    }
    public void run(){
        while(true){
            //..some loading operations
        }
        loading_after();
    }
    public void loading_after(){
        //..loading after handling
    }
}

我该怎么做呢?

根据对std::thread::detach()如何工作的描述,我认为你不能检测到它何时结束,除非你使你的loading_function()信号到外部世界,它已经结束。似乎没有一个内置的机制让分离的std::thread发出它已经结束的信号。我可能错了,我对std::thread没什么经验。

另一种方法是创建一个同时执行loading_function()loading_after()的函数,并将该函数传递给std::thread对象。

void loading_function()
{
    while(true)
    {
        //..some loading operations
    }
}
//I want to call after loading_function NOT in main thread like t.join();
void loading_after()
{  
    //..loading after handling
}
void load()
{
    loading_function();
    loading_after();
}
void foo()
{
    thread t(&load);
    t.detach();
}