什么是C / C ++相当于Java的异步任务

时间:2013-07-11 05:48:34

标签: java c++ c

在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 ++是什么?

3 个答案:

答案 0 :(得分:2)

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

我认为你可以在boost中找到你需要的东西。 boost :: thread有一些类,可以让你做你需要的。

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

答案 1 :(得分:0)

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

答案 2 :(得分: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 );