--- /dev/null
-#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;
+
+ }