4

在Java中有异步任务

private class AddTaskFeature extends AsyncTask<Void, Void, Void> {
    AddTaskFeature(String _process){
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected Void doInBackground(Void... unused) {
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }

    @Override
    protected void onPostExecute(Void unused) {
    }
}

该代码的 C/C++ 等价物是什么?

4

3 回答 3

3

直到 C++11 还没有对 C++ 的统一线程支持,更不用说更高级Future的基于类了。在 C++11 中看看std::future

但是,我认为您可以在 boost 中找到所需的内容。boost::thread 的类应该允许你做你需要的。

http://www.boost.org/doc/libs/1_54_0/doc/html/thread.html

于 2013-07-11T05:59:40.777 回答
1

AsyncTask 由 Android 而不是 Java 提供。在许多平台上,您可以使用 pthread 进行多线程处理。在 iOS 上,您可以使用调度队列。您应该查看您平台的编程手册。

于 2013-07-11T05:55:10.037 回答
0

您将使用 lambda 或覆盖 operator() 的类。

struct MyTask {
  Result operator()() { 
    // do work here
    return Result{};
  }
};
auto fut = std::async( MyTask{} );
fut.wait( );
auto result = fut.get( );

或者

auto fut = std::async( []() { 
  // do work
  return Result{};
} );
fut.wait( );
auto result = fut.get( );

没有进展,但可以提供 args,工作的结果是未来的结果。

auto fut = std::async( []( int a, int b ) { return a + b; }, 5, 4  );
assert( fut.get( ) == 9 );
于 2017-10-13T02:43:06.623 回答