@ -18,7 +18,7 @@ using namespace this_thread;
void sleep_to ( int _time ) {
void sleep_to ( int _time ) {
promise < void > _promise ;
promise < void > _promise ;
timeout t ( [ & ] ( ) {
delayed t ( [ & ] ( ) {
_promise . set_value ( ) ;
_promise . set_value ( ) ;
} , _time ) ;
} , _time ) ;
@ -27,7 +27,7 @@ void sleep_to (int _time) {
void promise_reject ( int _time ) {
void promise_reject ( int _time ) {
promise < void > _promise ;
promise < void > _promise ;
timeout t ( [ & ] ( ) {
delayed t ( [ & ] ( ) {
try {
try {
// simulate except
// simulate except
throw runtime_error ( " Error simulation " ) ;
throw runtime_error ( " Error simulation " ) ;
@ -65,249 +65,255 @@ int main () {
// --------------- TIME ASYNCHRONOUS FUNCTIONS --------------
// --------------- TIME ASYNCHRONOUS FUNCTIONS --------------
/**
// /**
* Init interval and timeout ; clear interval and timeout
// * Init periodic and delayed; clear periodic and delayed
*/
// */
interval inter1 ( [ & ] ( ) {
// periodic inter1 ([&]() {
cout < < " interval prvi " < < rtime_ms ( ) - start < < endl ;
// cout << "periodic prvi " << rtime_ms() - start << endl;
} , 1000 ) ;
// }, 1000);
interval inter2 ( [ & ] ( ) {
// periodic inter2 ([&]() {
cout < < " interval drugi " < < rtime_ms ( ) - start < < endl ;
// cout << "periodic drugi " << rtime_ms() - start << endl;
} , 2000 ) ;
// }, 2000);
interval inter3 ( [ & ] ( ) {
// periodic inter3 ([&]() {
cout < < " interval treći " < < rtime_ms ( ) - start < < endl ;
// cout << "periodic treći " << rtime_ms() - start << endl;
} , 1000 ) ;
// }, 1000);
interval inter4 ( [ & ] ( ) {
// periodic inter4 ([&]() {
// cout << "interval cetvrti " << rtime_ms() - start << endl;
// // cout << "periodic cetvrti " << rtime_ms() - start << endl;
cout < < " Ticks " < < inter3 . ticks ( ) < < endl ;
// cout << "Ticks " << inter3.ticks() << endl;
} , 500 ) ;
// }, 500);
interval inter5 ( [ & ] ( ) {
// periodic inter5 ([&]() {
cout < < " interval peti " < < rtime_ms ( ) - start < < endl ;
// cout << "periodic peti " << rtime_ms() - start << endl;
} , 2000 ) ;
// }, 2000);
interval inter6 ( [ & ] ( ) {
// periodic inter6 ([&]() {
cout < < " interval sesti " < < rtime_ms ( ) - start < < endl ;
// cout << "periodic sesti " << rtime_ms() - start << endl;
} , 3000 ) ;
// }, 3000);
timeout time1 ( [ & ] ( ) {
// delayed time1 ( [&] () {
cout < < " Close interval 1 i 2 " < < rtime_ms ( ) - start < < endl ;
// cout << "Close periodic 1 i 2 " << rtime_ms() - start << endl;
inter1 . stop ( ) ;
// inter1.stop();
cout < < " inter1.stop " < < endl ;
// cout << "inter1.stop " << endl;
inter2 . stop ( ) ;
// inter2.stop();
cout < < " inter2.stop " < < endl ;
// cout << "inter2.stop " << endl;
} , 8000 ) ;
// }, 8000);
timeout time2 ( [ & ] ( ) {
// delayed time2 ([&] () {
cout < < " Close interval 3 " < < rtime_ms ( ) - start < < endl ;
// cout << "Close periodic 3 " << rtime_ms() - start << endl;
inter3 . stop ( ) ;
// inter3.stop();
cout < < " Stoped " < < inter3 . stoped ( ) < < endl ;
// cout << "Stoped " << inter3.stoped() << endl;
// time1.stop();
// // time1.stop();
} , 5000 ) ;
// }, 5000);
if ( time2 . expired ( ) ) {
// if (time2.expired()) {
cout < < " isteko " < < endl ;
// cout << "isteko " << endl;
} else {
// } else {
cout < < " nije isteko " < < endl ;
// cout << "nije isteko " << endl;
}
// }
// sleep(6);
// // sleep(6);
if ( time2 . expired ( ) ) {
// if (time2.expired()) {
cout < < " isteko " < < endl ;
// cout << "isteko " << endl;
} else {
// } else {
cout < < " nije isteko " < < endl ;
// cout << "nije isteko " << endl;
}
// }
// // ------------------------ MAKE FUNCTIONS ASYNCHRONOUS -------------------------
// // // ------------------------ MAKE FUNCTIONS ASYNCHRONOUS -------------------------
/**
// /**
* Run an function asyncronic
// * Run an function asyncronic
*/
// */
atask ( [ ] ( ) {
// atask( []() {
sleep_for ( 2 s ) ; // only for simulate log duration function
// sleep_for(2s); // only for simulate log duration function
cout < < " atask 1 " < < endl ;
// cout << "atask 1" << endl;
return 5 ;
// return 5;
} ) ;
// });
/**
// /**
* Call not lambda function
// * Call not lambda function
*/
// */
atask ( notLambdaFunction ) ;
// atask (notLambdaFunction);
wait (
// wait (
atask (
// atask (
notLambdaFunction
// notLambdaFunction
)
// )
) ;
// );
/**
// /**
* Call class method
// * Call class method
*/
// */
clm classes ;
// clm classes;
atask ( [ & classes ] ( ) {
// atask( [&classes] () {
classes . classMethode ( ) ;
// classes.classMethode();
} ) ;
// });
sleep ( 5 ) ;
// sleep(5);
/**
// /**
* Wait after runned as async
// * Wait after runned as async
*/
// */
auto a = atask ( [ ] ( ) {
// auto a = atask( []() {
sleep_for ( 2 s ) ; // only for simulate log duration function
// sleep_for(2s); // only for simulate log duration function
cout < < " atask 2 " < < endl ;
// cout << "atask 2" << endl;
return 5 ;
// return 5;
} ) ;
// });
cout < < wait ( a ) < < endl ;
// cout << wait(a) << endl;
cout < < " print after atask 2 " < < endl ;
// cout << "print after atask 2" << endl;
/**
// /**
* Wait async function call and use i cout
// * Wait async function call and use i cout
*/
// */
cout < < wait ( atask ( [ ] ( ) {
// cout << wait(atask( [] () {
sleep_for ( chrono : : seconds ( 1 ) ) ; // only for simulate log duration function
// sleep_for(chrono::seconds(1)); // only for simulate log duration function
cout < < " wait end " < < endl ;
// cout << "wait end" << endl;
return 4 ;
// return 4;
} ) ) < < endl ;
// })) << endl;
/**
// /**
* Sleep with timeout sleep implement
// * Sleep with delayed sleep implement
*/
// */
sleep_to ( 3000 ) ;
// sleep_to(3000);
cout < < " sleep_to " < < rtime_ms ( ) - start < < endl ;
// cout << "sleep_to " << rtime_ms() - start << endl;
/**
// /**
* Catch promise reject
// * Catch promise reject
*/
// */
try {
// try {
promise_reject ( 3000 ) ;
// promise_reject(3000);
} catch ( runtime_error err ) {
// } catch (runtime_error err) {
cout < < err . what ( ) < < endl ;
// cout<< err.what() << endl;
}
// }
cout < < " promise_reject " < < rtime_ms ( ) - start < < endl ;
// cout << "promise_reject " << rtime_ms() - start << endl;
/**
// /**
* Nested asynchronous invocation
// * Nested asynchronous invocation
*/
// */
atask ( [ ] {
// atask( [] {
cout < < " idemo ... " < < endl ;
// cout << "idemo ..." << endl;
atask ( [ ] {
// atask( [] {
cout < < " ugdnježdena async funkcija " < < endl ;
// cout << "ugdnježdena async funkcija " << endl;
} ) ;
// });
} ) ;
// });
// // --------------- EVENTS -------------------
// // --------------- EVENTS -------------------
/**
// /**
* initialization of typed events
// * initialization of typed events
*/
// */
event < int , int > ev2int ;
// event<int, int> ev2int;
event < int , string > evintString ;
// event<int, string> evintString;
event < > evoid ;
// event<> evoid;
ev2int . on ( " sum " , [ ] ( int a , int b ) {
// ev2int.on("sum", [](int a, int b) {
cout < < " Sum " < < a + b < < endl ;
// cout << "Sum " << a+b << endl;
} ) ;
// });
ev2int . on ( " sum " , [ ] ( int a , int b ) {
// ev2int.on("sum", [](int a, int b) {
cout < < " Sum done " < < endl ;
// cout << "Sum done" << endl;
} ) ;
// });
evintString . on ( " substract " , [ ] ( int a , string b ) {
// evintString.on("substract", [](int a, string b) {
cout < < " Substract " < < a - stoi ( b ) < < endl ;
// cout << "Substract " << a-stoi(b) << endl;
} ) ;
// });
evoid . on ( " void " , [ ] ( ) {
// evoid.on("void", []() {
cout < < " Void emited " < < endl ;
// cout << "Void emited" << endl;
} ) ;
// });
string emited2 = " 2 " ;
// string emited2 = "2";
evoid . on ( " void " , [ & ] ( ) {
// evoid.on("void", [&]() {
cout < < " Void emited " < < emited2 < < endl ;
// cout << "Void emited " << emited2 << endl;
} ) ;
// });
evoid . emit ( " void " ) ;
// evoid.emit("void");
sleep ( 1 ) ;
// sleep(1);
/**
// /**
* Emit
// * Emit
*/
// */
ev2int . emit ( " sum " , 5 , 8 ) ;
// ev2int.emit("sum", 5, 8);
sleep ( 1 ) ;
// sleep(1);
evintString . emit ( " substract " , 3 , to_string ( 2 ) ) ;
// evintString.emit("substract", 3, to_string(2));
sleep ( 1 ) ;
// sleep(1);
evoid . off ( " void " ) ;
// evoid.off("void");
evoid . emit ( " void " ) ;
// evoid.emit("void");
/**
* Own class
*/
myOwnClass myclass ;
// cout << "Ukupno 2 int " << ev2int.listeners() << endl;
// cout << "Ukupno evintString " << evintString.listeners() << endl;
// cout << "Ukupno evoid " << evoid.listeners() << endl;
// cout << "Ukupno 2 int " << ev2int.listeners("sum") << endl;
timeout t ( [ & ] {
// /**
myclass . emit ( " constructed " , 1 ) ;
// * Own class
} , 200 ) ;
// */
myclass . on ( " constructed " , [ ] ( int i ) {
// myOwnClass myclass;
cout < < " Constructed " < < i < < endl ;
} ) ;
// delayed t( [&] {
// myclass.emit("constructed", 1);
// }, 200);
// myclass.on("constructed", [] (int i) {
// cout << "Constructed " << i << endl;
// });
auto status = fs : : read ( " test1.txt " ) ;
try {
// auto status = fs::read("test1.txt");
auto data = wait ( status ) ;
cout < < data ;
} catch ( exception & err ) {
cout < < err . what ( ) < < endl ;
}
string data_ ;
// try {
auto start_read = rtime_us ( ) ;
// auto data = wait(status);
// cout << data;
// } catch (exception& err) {
// cout << err.what() << endl;
// }
fs : : read ( " test1.txt " , [ & data_ , & start_read ] ( string data , exception * error ) {
if ( error ) {
// string data_;
cout < < " Error " < < error - > what ( ) < < endl ;
// auto start_read = rtime_us();
} else {
// cout << "Data " << endl << data << endl;
// fs::read("test1.txt", [&data_, &start_read] (string data, exception* error) {
// data_ = data;
// if (error) {
// cout << "Data_" << data_ << endl;
// cout << "Error " << error->what() << endl;
cout < < " read " < < rtime_us ( ) - start_read < < endl ;
// } else {
}
// // cout << "Data " << endl << data << endl;
} ) ;
// // data_ = data;
// // cout << "Data_" << data_ << endl;
// cout << "read " << rtime_us() - start_read << endl;
// }
// });
// ----------------------------------------------------------------------------------------------------
// // ----------------------------------------------------------------------------------------------------
cout < < " Run " < < endl ;
cout < < " Run " < < endl ;
_asynco_engine . run ( ) ;
_asynco_engine . run ( ) ;