]> Creatis software - cpPlugins.git/commitdiff
merge async example
authorjose guzman <jose@gmail.com>
Thu, 15 Oct 2015 09:51:36 +0000 (11:51 +0200)
committerjose guzman <jose@gmail.com>
Thu, 15 Oct 2015 09:51:36 +0000 (11:51 +0200)
1  2 
appli/examples/CMakeLists.txt
appli/examples/example_Test_async.cxx

index 517433382de2b41597ade8a1093b227a3355b065,ee0d4fe8440295bcc5e4846fb51940136bd193f3..b76208835a521e9393bf14002c4629e94d4a51f0
@@@ -55,6 -37,6 +55,7 @@@ SET
    NOPLUGINS_EXAMPLES_PROGRAMS
    example_BaseInteractorStyle
    example_ContourWidget
++  example_Test_async
    ## example_Test_DoubleClick
    ## example_ExtractDICOMSeries
    ## example_ImageGaussianModelEstimator
index 0000000000000000000000000000000000000000,efc9b94bb67ffa85845182f20066715719be824c..e3cfd99f1d0d24dc5f9bba30c04fc7678396f54c
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,79 +1,76 @@@
 -#ifdef WIN32
 -    Sleep(2000);
 -#else
 -    usleep(2000 * 1000);
 -#endif
+ #include <future>
+ #include <iostream>
+ #ifdef WIN32
+ #include <windows.h>
+ #else
+ #endif
++#ifdef WIN32
++#define mysleep Sleep(2000);
++#else
++#define mysleep usleep(2000);
++#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 << "Async call" << std::endl;
++
+     std::cout << "called from async" << std::endl;
+     this->state.insert(this->it ,10);
+   }
+   std::string returned_from_async() {
++    mysleep;
+     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;
+ }