]> 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
@@@ -4,31 -4,12 +4,31 @@@
  ## =========================
  
  SET(
 -  EXAMPLES_PROGRAMS
 +  EXAMPLES_PROGRAMS_ONLY_EXTENSIONS
 +  example_TestQuadSplitter
 +  )
 +
 +FOREACH(prog ${EXAMPLES_PROGRAMS_ONLY_EXTENSIONS})
 +  ADD_EXECUTABLE(${prog} ${prog}.cxx)
 +  TARGET_LINK_LIBRARIES(${prog} cpExtensions)
 +ENDFOREACH(prog)
 +
 +SET(
 +  EXAMPLES_PROGRAMS_ONLY_INTERFACE
    example_TestParameters
    example_LoadPlugins
 -  example_ReadWriteImage
 -  example_View2DImage
 -  example_Test_async
 +  )
 +
 +FOREACH(prog ${EXAMPLES_PROGRAMS_ONLY_INTERFACE}) 
 +  ADD_EXECUTABLE(${prog} ${prog}.cxx)
 +  TARGET_LINK_LIBRARIES(${prog} cpPlugins_Interface)
 +ENDFOREACH(prog)
 +
 +SET(
 +  EXAMPLES_PROGRAMS_WITH_PLUGINS
 +  #example_ReadWriteImage
 +  #example_MPR
 +  #example_View2DImage
    ##example_MarchingCubes
    ##example_OtsuFilter
    ##example_RGBImageToHSVChannels
@@@ -39,7 -20,8 +39,7 @@@
    ##example_MPR
    )
  
 -
 -FOREACH(prog ${EXAMPLES_PROGRAMS}) 
 +FOREACH(prog ${EXAMPLES_PROGRAMS_WITH_PLUGINS}) 
    ADD_EXECUTABLE(
      ${prog}
      ${prog}.cxx
@@@ -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;
+ }