如何检测std::线程以异步方式终止?
How can I detect std::thread was terminated as async?
我是一名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::chrono::steady_clock 对线程/异步中的代码进行基准测试
- 调用boost.asio的异步函数时,线程是什么时候创建的
- 多个网络连接的线程与异步 I/O
- STD ::与指定线程的异步类似物
- 异步处理设备的高级线程用法
- 有没有办法为任何函数编写通用代码,以便它可以(异步)执行并从线程池中获得返回值?
- 异步记录器线程安全
- 异步是否总是在C++中使用另一个线程/内核/进程
- XAudio2 教程 - 单独的线程和异步读取?
- 使用多线程处理的异步请求
- C++ cv::Mat 返回向量的<rectangle>线程异步
- STD :: async的最大线程数量是多少,将异步创建和执行
- 发生哪些线程异步操作
- 如何实现多线程异步操作
- C++低延迟线程异步缓冲流(用于日志记录)–Boost
- QML是否与多线程/异步调用兼容
- c++的非线程异步IO简介
- 线程异步中断
- boost::asio多线程异步接受,带有阻塞读/写服务器