如何检测std :: thread被终止为异步?

时间:2015-06-05 10:46:15

标签: c++ multithreading

我是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
    }
}

我该怎么做?

1 个答案:

答案 0 :(得分:1)

根据有关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();
}