]> Creatis software - cpPlugins.git/blobdiff - appli/examples/example_Test_async.cxx
async test
[cpPlugins.git] / appli / examples / example_Test_async.cxx
diff --git a/appli/examples/example_Test_async.cxx b/appli/examples/example_Test_async.cxx
new file mode 100644 (file)
index 0000000..efc9b94
--- /dev/null
@@ -0,0 +1,79 @@
+#include <future>
+#include <iostream>
+#ifdef WIN32
+#include <windows.h>
+#else
+#endif
+
+class Test
+{
+private:
+  std::vector<int> state;
+  std::vector<int>::iterator it;
+  std::vector<bool> isAvailable;
+public:
+  Test()
+  {
+    this->it = this->state.begin();
+  }
+
+  void called_from_async()
+  {
+#ifdef WIN32
+    Sleep(2000);
+#else
+    usleep(2000 * 1000);
+#endif
+    std::cout << "called from async" << std::endl;
+    this->state.insert(this->it ,10);
+  }
+
+  std::string returned_from_async() {
+#ifdef WIN32
+    Sleep(2000);
+#else
+    usleep(2000 * 1000);
+#endif
+    //std::cout << "Async call" << std::endl;
+    return "Async call";
+  }
+
+  template<class ASYNC>
+  void print_results(ASYNC &f)
+  {
+    std::string result = f.get();
+    std::cout << result.c_str() << std::endl;
+  }
+
+  int getState(int pos)
+  {
+    return this->state.at(pos);
+  }
+
+  int getStateSize()
+  {
+    return this->state.size();
+  }
+};
+
+int main() {
+  Test test;
+  std::future<void> result(std::async(&Test::called_from_async, &test));
+
+  auto f1 = std::async(std::launch::async, &Test::returned_from_async, &test);
+  std::cout << "Message from main." << std::endl;
+  do
+  {
+    std::cout << test.getStateSize();
+  } while (test.getStateSize()<1);
+
+#ifdef _DEBUG
+  auto i = 0;
+  std::cout << "wait for close";
+  std::cin >> i;
+#endif
+
+  return 0;
+
+}
\ No newline at end of file