c++ - 我如何检测 std::thread 被终止为异步?

标签 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
    }
}

我该怎么做?

最佳答案

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

关于c++ - 我如何检测 std::thread 被终止为异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30664595/

相关文章:

c++ - 按段比较 64 位整数

c++ - 在 Linux 中清理无限循环应用程序的正确方法是什么?

c++ - 在 Visual Studio 2015 中检测要与 C++ 宏一起使用的 SIMD 指令集

objective-c - 异步更新 NSTableView 数据源

c++ - 为什么在此示例中成员未进行零初始化?

C++优化函数调用批处理模式

ios - 我可以在 Realm 的线程中使用被忽略的属性吗?

java - testNG/selenium webdriver 限制为 5 个并行测试

c++ - 内存在分配 block 之前被破坏

c# - 线程 : incorrect Variable passing C#