@ -1,28 +1,24 @@
// // #define NUM_OF_RUNNERS 2
// #define NUM_OF_RUNNERS 2
# include "../lib/asynco.hpp"
# include "../lib/asynco.hpp"
# include "../lib/trigger .hpp"
# include "../lib/event .hpp"
# include "../lib/filesystem.hpp"
# include "../lib/filesystem.hpp"
# include "../lib/timers.hpp"
# include "../lib/timers.hpp"
# include "../lib/define.hpp"
using namespace marcelb : : asynco ;
using namespace marcelb : : asynco ;
using namespace trigger s;
using namespace event s;
# include <iostream>
# include <iostream>
# include <unistd.h>
# include <unistd.h>
# include <thread>
# include <thread>
# include <future>
# include <vector>
using namespace std ;
using namespace std ;
using namespace this_thread ;
using namespace this_thread ;
void sleep_to ( int _time ) {
void sleep_to ( int _time ) {
promise < void > _promise ;
promise < void > _promise ;
delayed t ( [ & ] ( ) {
timeout t ( [ & ] ( ) {
_promise . set_value ( ) ;
_promise . set_value ( ) ;
} , _time ) ;
} , _time ) ;
@ -31,7 +27,7 @@ void sleep_to (int _time) {
void promise_reject ( int _time ) {
void promise_reject ( int _time ) {
promise < void > _promise ;
promise < void > _promise ;
delayed t ( [ & ] ( ) {
timeout t ( [ & ] ( ) {
try {
try {
// simulate except
// simulate except
throw runtime_error ( " Error simulation " ) ;
throw runtime_error ( " Error simulation " ) ;
@ -57,9 +53,9 @@ class clm {
// ------------------ EXTEND OWN CLASS WITH EVENTS -------------------
// ------------------ EXTEND OWN CLASS WITH EVENTS -------------------
class myOwnClass : public trigger < int > {
class myOwnClass : public event < int > {
public :
public :
myOwnClass ( ) : trigger ( ) { } ;
myOwnClass ( ) : event ( ) { } ;
} ;
} ;
@ -69,37 +65,37 @@ int main () {
// --------------- TIME ASYNCHRONOUS FUNCTIONS --------------
// --------------- TIME ASYNCHRONOUS FUNCTIONS --------------
/**
// /**
* Init periodic and delayed ; clear periodic and delayed
// * Init interval and timeout; clear interval and timeout
*/
// */
// periodic inter1 ([&]() {
// interval inter1 ([&]() {
// cout << "periodic prvi " << rtime_ms() - start << endl;
// cout << "interval prvi " << rtime_ms() - start << endl;
// }, 1000);
// }, 1000);
// periodic inter2 ([&]() {
// interval inter2 ([&]() {
// cout << "periodic drugi " << rtime_ms() - start << endl;
// cout << "interval drugi " << rtime_ms() - start << endl;
// }, 2000);
// }, 2000);
// periodic inter3 ([&]() {
// interval inter3 ([&]() {
// cout << "periodic treći " << rtime_ms() - start << endl;
// cout << "interval treći " << rtime_ms() - start << endl;
// }, 1000);
// }, 1000);
// periodic inter4 ([&]() {
// interval inter4 ([&]() {
// // cout << "periodic cetvrti " << rtime_ms() - start << endl;
// // cout << "interval cetvrti " << rtime_ms() - start << endl;
// cout << "Ticks " << inter3.ticks() << endl;
// cout << "Ticks " << inter3.ticks() << endl;
// }, 500);
// }, 500);
// periodic inter5 ([&]() {
// interval inter5 ([&]() {
// cout << "periodic peti " << rtime_ms() - start << endl;
// cout << "interval peti " << rtime_ms() - start << endl;
// }, 2000);
// }, 2000);
// periodic inter6 ([&]() {
// interval inter6 ([&]() {
// cout << "periodic sesti " << rtime_ms() - start << endl;
// cout << "interval sesti " << rtime_ms() - start << endl;
// }, 3000);
// }, 3000);
// delayed time1 ( [&] () {
// timeout time1 ( [&] () {
// cout << "Close periodic 1 i 2 " << rtime_ms() - start << endl;
// cout << "Close interval 1 i 2 " << rtime_ms() - start << endl;
// inter1.stop();
// inter1.stop();
// cout << "inter1.stop " << endl;
// cout << "inter1.stop " << endl;
// inter2.stop();
// inter2.stop();
@ -107,8 +103,8 @@ int main () {
// }, 8000);
// }, 8000);
// delayed time2 ([&] () {
// timeout time2 ([&] () {
// cout << "Close periodic 3 " << rtime_ms() - start << endl;
// cout << "Close interval 3 " << rtime_ms() - start << endl;
// inter3.stop();
// inter3.stop();
// cout << "Stoped " << inter3.stoped() << endl;
// cout << "Stoped " << inter3.stoped() << endl;
// // time1.stop();
// // time1.stop();
@ -129,34 +125,15 @@ int main () {
// cout << "nije isteko " << endl;
// cout << "nije isteko " << endl;
// }
// }
// auto d = Delayed( [](){
// // // ------------------------ MAKE FUNCTIONS ASYNCHRONOUS -------------------------
// cout << "Delayed" << endl;
// }, 2000);
// auto p = Periodic( [](){
// cout << "Periodic" << endl;
// }, 700);
// Periodic( [&] (){
// /**
// cout << "Delayed expire " << d->expired() << endl;
// * Run an function asyncronic
// cout << "Periodic ticks " << p->ticks() << endl;
// */
// cout << "Delayed stoped " << d->stoped() << endl;
// cout << "Periodic stoped " << p->stoped() << endl;
// }, 1000);
// Delayed( [&](){
// p->stop();
// }, 10000);
// // // // ------------------------ MAKE FUNCTIONS ASYNCHRONOUS -------------------------
// // /**
// // * Run an function asyncronic
// // */
// async_ ( []() {
// atask( []() {
// sleep_for(2s); // only for simulate log duration function
// sleep_for(2s); // only for simulate log duration function
// cout << "asynco 1" << endl;
// cout << "atask 1" << endl;
// return 5;
// return 5;
// });
// });
@ -164,56 +141,51 @@ int main () {
// * Call not lambda function
// * Call not lambda function
// */
// */
// async_ (notLambdaFunction);
// atask (notLambdaFunction);
// a wait_ (
// wait (
// async_ (
// atask (
// notLambdaFunction
// notLambdaFunction
// )
// )
// );
// );
// /**
// // async(launch::async, [] () {
// * Call class method
// // cout << "Another thread in async style!" << endl;
// */
// // });
// // /**
// // * Call class method
// // */
// clm classes;
// clm classes;
// async_ ( [&classes] () {
// atask( [&classes] () {
// classes.classMethode();
// classes.classMethode();
// });
// });
// sleep(5);
// sleep(5);
// // / **
// /**
// // * await_ after runned as async
// * Wait after runned as async
// // */
// */
// auto aa = async_ ( []() {
// auto a = atask ( []() {
// sleep_for(2s); // only for simulate log duration function
// sleep_for(2s); // only for simulate log duration function
// cout << "async_ 2" << endl;
// cout << "atask 2" << endl;
// return 5;
// return 5;
// });
// });
// cout << a wait_ (a a) << endl;
// cout << wait(a) << endl;
// cout << "print after async_ 2" << endl;
// cout << "print after atask 2" << endl;
// /**
// /**
// * await_ async function call and use i cout
// * Wait async function call and use i cout
// */
// */
// cout << await_(async_ ( [] () {
// 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 << "a wait_ end" << endl;
// cout << "wait end" << endl;
// return 4;
// return 4;
// })) << endl;
// })) << endl;
// /**
// /**
// * Sleep with delayed sleep implement
// * Sleep with timeout sleep implement
// */
// */
// sleep_to(3000);
// sleep_to(3000);
@ -237,76 +209,22 @@ int main () {
// */
// */
// async_ ( [] {
// atask ( [] {
// cout << "idemo ..." << endl;
// cout << "idemo ..." << endl;
// async_ ( [] {
// atask ( [] {
// cout << "ugdnježdena async funkcija " << endl;
// cout << "ugdnježdena async funkcija " << endl;
// });
// });
// });
// });
// // // --------------- EVENTS -------------------
// // -------------------------- AWAIT ALL ----------------------------------
// auto a = async_ ( []() {
// cout << "A" << endl;
// return 3;
// });
// auto b = async_ ( []() {
// cout << "B" << endl;
// throw runtime_error("Test exception");
// return;
// });
// auto c = async_ ( []() {
// cout << "C" << endl;
// return "Hello";
// });
// int a_;
// string c_;
// auto await_all = [&] () {
// a_ = await_(a);
// await_(b);
// c_ = await_(c);
// };
// try {
// await_all();
// cout << "a_ " << a_ << " c_ " << c_ << endl;
// } catch (const exception& exc) {
// cout << exc.what() << endl;
// }
// // // same type
// vector<future<void>> fut_vec;
// for (int i=0; i<5; i++) {
// fut_vec.push_back(
// async_ ( [i]() {
// cout << "Async_ " << i << endl;
// })
// );
// }
// auto await_all2 = [&] () {
// for (int i=0; i<fut_vec.size(); i++) {
// await_ (fut_vec[i]);
// }
// };
// await_all2();
// // --------------- EVENTS -------------------
// /**
// /**
// * initialization of typed events
// * initialization of typed events
// */
// */
// trigger <int, int> ev2int;
// event<int, int> ev2int;
// trigger <int, string> evintString;
// event<int, string> evintString;
// trigger <> 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;
@ -330,28 +248,22 @@ int main () {
// cout << "Void emited " << emited2 << endl;
// cout << "Void emited " << emited2 << endl;
// });
// });
// evoid.tick ("void");
// evoid.emit ("void");
// sleep(1);
// sleep(1);
// /**
// /**
// * Emit
// * Emit
// */
// */
// ev2int.tick ("sum", 5, 8);
// ev2int.emit ("sum", 5, 8);
// sleep(1);
// sleep(1);
// evintString.tick ("substract", 3, to_string(2));
// evintString.emit ("substract", 3, to_string(2));
// sleep(1);
// sleep(1);
// evoid.off("void");
// evoid.off("void");
// evoid.tick("void");
// evoid.emit("void");
// 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;
// /**
// /**
// * Own class
// * Own class
@ -359,8 +271,8 @@ int main () {
// myOwnClass myclass;
// myOwnClass myclass;
// delayed t( [&] {
// timeout t( [&] {
// myclass.tick ("constructed", 1);
// myclass.emit ("constructed", 1);
// }, 200);
// }, 200);
// myclass.on("constructed", [] (int i) {
// myclass.on("constructed", [] (int i) {
@ -373,7 +285,7 @@ int main () {
// try {
// try {
// auto data = a wait_ (status);
// auto data = wait(status);
// cout << data;
// cout << data;
// } catch (exception& err) {
// } catch (exception& err) {
// cout << err.what() << endl;
// cout << err.what() << endl;
@ -395,7 +307,7 @@ int main () {
// });
// });
// // ----------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------
cout < < " Run " < < endl ;
cout < < " Run " < < endl ;
_asynco_engine . run ( ) ;
_asynco_engine . run ( ) ;