From 8fdf56d1bbfef1336f5f7bce26c649e61e709863 Mon Sep 17 00:00:00 2001 From: marcelb Date: Sat, 2 Mar 2024 00:51:23 +0100 Subject: [PATCH] Timer functions, test, comments and readme --- .gitignore | 1 + README.md | 216 +++++++++++++++++++++++++++++++++++ example/asynco.hpp | 164 -------------------------- lib/asynco.hpp | 159 ++------------------------ lib/event.hpp | 20 +++- lib/rotor.hpp | 212 ++++++++++++++++++++++++++++++++++ lib/{loop.hpp => runner.hpp} | 47 +++++--- test/test | Bin 404920 -> 0 bytes test/test.cpp | 186 +++++++++++++++++++++++------- 9 files changed, 635 insertions(+), 370 deletions(-) delete mode 100644 example/asynco.hpp create mode 100644 lib/rotor.hpp rename lib/{loop.hpp => runner.hpp} (62%) delete mode 100755 test/test diff --git a/.gitignore b/.gitignore index e69de29..b23ba77 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +test/test \ No newline at end of file diff --git a/README.md b/README.md index e69de29..f16ce8c 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,216 @@ + +# Asynco + +A C++ library for event-driven asynchronous multi-threaded programming. + +## Features + +- Object oriented +- Small and easy to integrate +- Header only +- Asynchronous launch functions +- Multithread parallel execution of tasks +- Timer functions: interval, timeout +- Events (on, emit) +- Event loop + +## Installation + +Just download the latest release and unzip it into your project. + +```c++ +#include "asynco/lib/asynco.hpp" // asynco(), wait() +#include "asynco/lib/event.hpp" // event +#include "asynco/lib/rotor.hpp" // interval, timeout +#include "asynco/lib/runner.hpp" // on_async +using namespace marcelb; + +#ifndef ON_RUNNER +#define ON_RUNNER +runner on_async; +#endif +``` + +## Usage + +Time asynchronous functions + +```c++ +// start interval +interval inter1 ([&]() { + cout << "Interval 1" << endl; +}, 1000); + +// stop interval +inter1.clear(); + +// start timeout +timeout time1 ( [&] () { + cout << "Timeout 1 " << endl; +}, 10000); + +// stop timeout +time1.clear(); +``` +Make functions asynchronous + +```c++ +/** +* Put task directly and get returned value - it is not recommended to use it +*/ + +auto res1 = on_async.put_task( [] () { + cout << "Jebiga " < _promise; + timeout t( [&]() { + _promise.set_value(); + }, _time); + + return _promise.get_future().get(); +} + +sleep_to(3000); + +/** +* Catch promise reject +*/ + +void promise_reject (int _time) { + promise _promise; + timeout t( [&]() { + try { + // simulate except + throw runtime_error("Error simulation"); + _promise.set_value(); + } catch (...) { + _promise.set_exception(current_exception()); + } + }, _time); + + return _promise.get_future().get(); +} + +try { + promise_reject(3000); +} catch (runtime_error err) { + cout<< err.what() << endl; +} +``` +Events + +```c++ +/** +* initialization of typed events +*/ + +event ev2int; +event evintString; +event<> evoid; + +ev2int.on("sum", [](int a, int b) { + cout << "Sum " << a+b << endl; +}); + +evintString.on("substract", [](int a, string b) { + cout << "Substract " << a-stoi(b) << endl; +}); + +evoid.on("void", []() { + cout << "Void emited" << endl; +}); + +sleep(1); + +/** +* Emit +*/ + +ev2int.emit("sum", 5, 8); + +sleep(1); +evintString.emit("substract", 3, to_string(2)); + +sleep(1); +evoid.emit("void"); +``` +Extend own class whit events + +```c++ +class myOwnClass : public event { + public: + myOwnClass() : event() {}; +}; + +myOwnClass myclass; + +timeout t( [&] { + myclass.emit("constructed", 1); +}, 200); + +myclass.on("constructed", [] (int i) { + cout << "Constructed " << i << endl; +}); + +``` +## License + +[APACHE 2.0](http://www.apache.org/licenses/LICENSE-2.0/) + + +## Support & Feedback + +For support and any feedback, contact the address: marcelb96@yahoo.com. + +## Contributing + +Contributions are always welcome! + +Feel free to fork and start working with or without a later pull request. Or contact for suggest and request an option. + diff --git a/example/asynco.hpp b/example/asynco.hpp deleted file mode 100644 index 7803997..0000000 --- a/example/asynco.hpp +++ /dev/null @@ -1,164 +0,0 @@ -#ifndef _ASYNCO_ -#define _ASYNCO_ - -#include -#include -#include -#include - -using namespace std; - -namespace marcelb { - -class interval; -class timeout; - -class loop_core { - vector intervals; - vector timeouts; - time_t sampling; - mutex i_m, t_m; - future bot; - - loop_core() { - bot = async(launch::async, [this] () { - loop(); - }); - // on_async.put_task( [this] () { - // loop(); - // }); - } - - void run(interval& _interval) { - lock_guard lock(i_m); - intervals.push_back(_interval); - update_sampling(); - } - - void run(timeout& _timeout) { - lock_guard lock(t_m); - timeouts.push_back(_timeout); - update_sampling(); - } - - void loop() { - while (true) { - for (auto& _interval : intervals) { - int64_t now = chrono::duration_cast(chrono::system_clock::now().time_since_epoch()).count(); - if (now - _interval.execute >= _interval._duration) { - _interval.callback(); - _interval.execute = now; - } - } - - for (int i=0; i(chrono::system_clock::now().time_since_epoch()).count(); - if (now - timeouts[i]._construct >= timeouts[i]._duration) { - auto& _timeout = timeouts[i]; - { - lock_guard lock(t_m); - timeouts.erase(timeouts.begin() + i); - } - _timeout.callback(); - } - } - this_thread::sleep_for(chrono::milliseconds(sampling)); - } - } - - void update_sampling() { - sampling = 0; - for (auto& _interval : intervals) { - sampling += _interval._duration; - } - for (auto& _timeout : timeouts) { - sampling += _timeout._duration; - } - sampling /= (intervals.size() + timeouts.size())*2; - } - - -}; - -loop_core co_loop; - - - - -class interval { - public: - bool run = true; - function callback; - const time_t _duration; - time_t execute = 0; - - // public: - interval(function func, const time_t duration): callback(func), _duration(duration) { - #ifndef ON_ASYNC - throw string("Not on_async defined!"); - #endif - - auto task = [&] () { - while (run) { - // this_thread::sleep_for(chrono::milliseconds(_duration)); - // if (run) { - callback(); - // } - } - }; - - // on_async.put_task(task); - co_loop.run(this*); - } - - void clear() { - run = false; - } - - ~interval() { - clear(); - } -}; - -class timeout { - public: - bool run = true; - function callback; - const time_t _duration; - int64_t _construct = - chrono::duration_cast(chrono::system_clock::now().time_since_epoch()) - .count(); - - // public: - timeout(function f, const time_t duration): callback(f), _duration(duration) { - #ifndef ON_ASYNC - throw string("Not on_async defined!"); - #endif - - auto task = [&] () { - // int64_t _start = - // chrono::duration_cast(chrono::system_clock::now().time_since_epoch()) - // .count(); - // this_thread::sleep_for(chrono::milliseconds(_duration - (_start - _construct))); - if (run) { - callback(); - } - }; - - // on_async.put_task(task); - co_loop.run(this*); - } - - void clear() { - run = false; - } - - ~timeout() { - clear(); - } -}; - - -} - -#endif \ No newline at end of file diff --git a/lib/asynco.hpp b/lib/asynco.hpp index 1c67552..8fc3f32 100644 --- a/lib/asynco.hpp +++ b/lib/asynco.hpp @@ -1,162 +1,20 @@ #ifndef _ASYNCO_ #define _ASYNCO_ -#include "loop.hpp" +#include "runner.hpp" using namespace std; namespace marcelb { -#ifndef ON_ASYNC -#define ON_ASYNC -AsyncLoop on_async; +#ifndef ON_RUNNER +#define ON_RUNNER +runner on_async; #endif -class interval; -class timeout; - -class loop_core { - static vector intervals; - static vector timeouts; - time_t sampling; - mutex i_m, t_m; - - loop_core() { - on_async.put_task( [this] () { - loop(); - }); - } - - void run(interval& _interval) { - lock_guard lock(i_m); - intervals.push_back(_interval); - update_sampling(); - } - - void run(timeout& _timeout) { - lock_guard lock(t_m); - timeouts.push_back(_timeout); - update_sampling(); - } - - void loop() { - while (true) { - for (auto& _interval : intervals) { - int64_t now = chrono::duration_cast(chrono::system_clock::now().time_since_epoch()).count(); - if (now - _interval.execute >= _interval._duration) { - _interval.callback(); - _interval.execute = now; - } - } - - for (int i=0; i(chrono::system_clock::now().time_since_epoch()).count(); - if (now - timeouts[i]._construct >= timeouts[i]._duration) { - auto& _timeout = timeouts[i]; - { - lock_guard lock(t_m); - timeouts.erase(timeouts.begin() + i); - } - _timeout.callback(); - } - } - sleep_for(chrono::milliseconds(sampling)); - } - } - - void update_sampling() { - sampling = 0; - for (auto& _interval : intervals) { - sampling += _interval._duration; - } - for (auto& _timeout : timeouts) { - sampling += _timeout._duration; - } - sampling /= (intervals.size() + timeouts.size())*2; - } - - -}; - -loop_core co_loop; - - - - -class interval { - public: - bool run = true; - function callback; - const time_t _duration; - time_t execute = 0; - - // public: - interval(function func, const time_t duration): callback(func), _duration(duration) { - #ifndef ON_ASYNC - throw string("Not on_async defined!"); - #endif - - auto task = [&] () { - while (run) { - // this_thread::sleep_for(chrono::milliseconds(_duration)); - // if (run) { - callback(); - // } - } - }; - - // on_async.put_task(task); - co_loop.run(this*); - } - - void clear() { - run = false; - } - - ~interval() { - clear(); - } -}; - -class timeout { - public: - bool run = true; - function callback; - const time_t _duration; - int64_t _construct = - chrono::duration_cast(chrono::system_clock::now().time_since_epoch()) - .count(); - - // public: - timeout(function f, const time_t duration): callback(f), _duration(duration) { - #ifndef ON_ASYNC - throw string("Not on_async defined!"); - #endif - - auto task = [&] () { - // int64_t _start = - // chrono::duration_cast(chrono::system_clock::now().time_since_epoch()) - // .count(); - // this_thread::sleep_for(chrono::milliseconds(_duration - (_start - _construct))); - if (run) { - callback(); - } - }; - - // on_async.put_task(task); - co_loop.run(this*); - } - - void clear() { - run = false; - } - - ~timeout() { - clear(); - } -}; - - +/** + * Run the function asynchronously +*/ template auto asynco(F&& f, Args&&... args) -> future::type> { using return_type = typename result_of::type; @@ -165,6 +23,9 @@ auto asynco(F&& f, Args&&... args) -> future::typ return res; } +/** + * Block until the asynchronous call completes +*/ template T wait(future r) { return r.get(); diff --git a/lib/event.hpp b/lib/event.hpp index 3c774c2..c4e0a81 100644 --- a/lib/event.hpp +++ b/lib/event.hpp @@ -5,28 +5,38 @@ #include #include #include -#include "loop.hpp" +#include "runner.hpp" using namespace std; namespace marcelb { -#ifndef ON_ASYNC -#define ON_ASYNC -AsyncLoop on_async; +#ifndef ON_RUNNER +#define ON_RUNNER +runner on_async; #endif - +/** + * Event class, for event-driven programming. + * These events are typed according to the arguments of the callback function +*/ template class event { private: unordered_map> events; public: + + /** + * Defines event by key, and callback function + */ void on(const string& key, function callback) { events[key] = callback; } + /** + * It emits an event and sends a callback function saved according to the key with the passed parameters + */ template void emit(const string& key, Args... args) { auto it = events.find(key); diff --git a/lib/rotor.hpp b/lib/rotor.hpp new file mode 100644 index 0000000..6f0f105 --- /dev/null +++ b/lib/rotor.hpp @@ -0,0 +1,212 @@ +#ifndef _ROTOR_ +#define _ROTOT_ + +#include "runner.hpp" +#include "chrono" + +#include "iostream" + +using namespace std; +using namespace marcelb; + +#ifndef ON_RUNNER +#define ON_RUNNER +runner on_async; +#endif + +namespace marcelb { + +/** + * Get the time in ms from the epoch +*/ + +int64_t rtime_ms() { + return chrono::duration_cast(chrono::system_clock::now() + .time_since_epoch()) + .count(); +} + +/** + * Structure for time events +*/ + +struct time_event { + function callback; + int64_t init; + int64_t time; + bool repeat; + bool stop; +}; + +/** + * Event loop for time events +*/ + +class rotor { + vector tevents; + mutex te_m; + bool rotating = true; + int64_t sampling; + + /** + * Loop method, started by the constructor in a separate runner + * It checks the events on the stack and sends the expired ones to the runner + */ + void loop() { + while (rotating) { + for (int i=0; istop) { + remove(i); + i--; + } + + else if (expired(tevents[i])) { + on_async.put_task(tevents[i]->callback); + if (tevents[i]->repeat) { + tevents[i]->init = rtime_ms(); + } + else { + remove(i); + i--; + } + } + } + this_thread::sleep_for(chrono::milliseconds(sampling)); + } + } + + /** + * The method checks whether the time event has expired + */ + bool expired(struct time_event *tevent) { + return rtime_ms() - tevent->init >= tevent->time; + } + + /** + * The method deletes a non-repeating or stopped event from the stack + */ + void remove(const int& position) { + lock_guard lock(te_m); + tevents.erase(tevents.begin()+position); + } + + /** + * Updates the idle time of the loop, according to twice the frequency of available events + */ + void update_sampling() { + sampling = tevents[0]->time; + for (int i=0; i tevents[i]->time) { + sampling = tevents[i]->time; + } + } + sampling /= tevents.size()*2; + } + + public: + + /** + * Constructor for the rotor, starts the given loop by occupying one runner + */ + rotor() { + on_async.put_task( [&] () { + loop(); + }); + }; + + /** + * Adds a time event to the stack + */ + void insert(struct time_event *tevent) { + lock_guard lock(te_m); + tevents.push_back(tevent); + update_sampling(); + }; + + /** + * Returns the number of active events + */ + int active() { + return tevents.size(); + } + + /** + * Stops all active events and stops the rotor + */ + ~rotor() { + for (int i=0; istop = true; + } + rotating = false; + } + +}; + +/** + * It is intended that there is only one global declaration +*/ +rotor _rotor; + +/** + * A class for all timer functions +*/ +class timer_core { + public: + struct time_event t_event; + + /** + * Timer constructor, receives a callback function and time + */ + timer_core( function _callback, int64_t _time): + t_event({ _callback, rtime_ms(), _time, false, false }) { + + } + /** + * Stop timer + */ + void clear() { + t_event.stop = true; + } + + /** + * Destruktor of timer, call stop + */ + ~timer_core() { + clear(); + } +}; + +/** + * Class interval for periodic execution of the callback in time in ms +*/ +class interval : public timer_core { + public: + + /** + * The constructor receives a callback function and an interval time + */ + interval( function _callback, int64_t _time): timer_core(_callback, _time) { + t_event.repeat = true; + _rotor.insert(&t_event); + } +}; + +/** + * Class interval for delayed callback execution in ms +*/ +class timeout : public timer_core { + public: + + /** + * The constructor receives a callback function and a delay time + */ + timeout( function _callback, int64_t delay): timer_core(_callback, delay) { + t_event.repeat = false; + _rotor.insert(&t_event); + } +}; + +} + +#endif diff --git a/lib/loop.hpp b/lib/runner.hpp similarity index 62% rename from lib/loop.hpp rename to lib/runner.hpp index 3a051cc..987a16c 100644 --- a/lib/loop.hpp +++ b/lib/runner.hpp @@ -1,5 +1,5 @@ -#ifndef _LOOP_ -#define _LOOP_ +#ifndef _RUNNER_ +#define _RUNNER_ #include #include @@ -13,22 +13,31 @@ using namespace std; namespace marcelb { -#ifdef ON_ASYNC -extern AsyncLoop on_async; +#ifdef ON_RUNNER +extern runner on_async; #endif -class AsyncLoop { +/** + * The runner class implements multithread, task stack and event loop for asynchronous execution of tasks +*/ +class runner { private: - vector workers; + vector runners; queue> tasks; mutex q_io; condition_variable cv; bool stop; public: - AsyncLoop(size_t pool_size = thread::hardware_concurrency()) : stop(false) { + + /** + * The constructor starts as many threads as the system has cores, + * and runs an event loop inside each one. + * Each event loop waits for tasks from the stack and executes them. + */ + runner(size_t pool_size = thread::hardware_concurrency()) : stop(false) { for (size_t i = 0; i < pool_size; ++i) { - workers.emplace_back([this] { + runners.emplace_back( thread([this] { while (true) { function task; { @@ -41,10 +50,13 @@ class AsyncLoop { } task(); } - }); + })); } } + /** + * With the method, we send the callback function and its arguments to the task stack + */ template auto put_task(F&& f, Args&&... args) -> future::type> { @@ -66,22 +78,31 @@ class AsyncLoop { return res; } + /** + * Returns the number of tasks the runner has to perform + */ unsigned int count_tasks() { return tasks.size(); } + /** + * Returns the number of threads used by the runner + */ unsigned int count_threads() { - return workers.size(); + return runners.size(); } - ~AsyncLoop() { + /** + * The destructor stops all loops and stops all threads + */ + ~runner() { { unique_lock lock(q_io); stop = true; } cv.notify_all(); - for (thread& worker : workers) { - worker.join(); + for (thread& runner : runners) { + runner.join(); } } diff --git a/test/test b/test/test deleted file mode 100755 index ff1ea53e46b3b0cf37566d8c1346cbe4f5ba3baa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404920 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 z

}dK0)@ExsQw?mKw5&)gP=*?Rxu!~UZF991_y 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 S;`NVzU2WXQ(F>w~-ueGcFsQ5m diff --git a/test/test.cpp b/test/test.cpp index f48ca4e..55212df 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -1,8 +1,9 @@ -// #include "../lib/loop.hpp" -// #include "../lib/asynco.hpp" -// #include "../example/asynco.hpp" +#include "../lib/runner.hpp" +#include "../lib/asynco.hpp" #include "../lib/event.hpp" +#include "../lib/rotor.hpp" + #include #include @@ -10,49 +11,85 @@ using namespace std; using namespace marcelb; using namespace this_thread; -#ifndef ON_ASYNC -#define ON_ASYNC -AsyncLoop on_async(8); +#ifndef ON_RUNNER +#define ON_RUNNER +runner on_async; #endif + +void sleep_to (int _time) { + promise _promise; + timeout t( [&]() { + _promise.set_value(); + }, _time); + + return _promise.get_future().get(); +} + +void promise_reject (int _time) { + promise _promise; + timeout t( [&]() { + try { + // simulate except + throw runtime_error("Error simulation"); + _promise.set_value(); + } catch (...) { + _promise.set_exception(current_exception()); + } + }, _time); + + return _promise.get_future().get(); +} + +// ------------------ EXTEND OWN CLASS WITH EVENTS ------------------- + +class myOwnClass : public event { + public: + myOwnClass() : event() {}; +}; + + int main () { - // auto start = chrono::high_resolution_clock::now(); + auto start = rtime_ms(); + + // --------------- TIME ASYNCHRONOUS FUNCTIONS -------------- + + /** + * Init interval and timeout; clear interval and timeout + */ // interval inter1 ([&]() { - // cout << "interval prvi " << chrono::duration_cast(chrono::high_resolution_clock::now() - start).count() << endl; + // cout << "interval prvi " << rtime_ms() - start << endl; // }, 1000); // interval inter2 ([&]() { - // cout << "interval drugi " << chrono::duration_cast(chrono::high_resolution_clock::now() - start).count() << endl; + // cout << "interval drugi " << rtime_ms() - start << endl; // }, 2000); // interval inter3 ([&]() { - // cout << "interval treći " << chrono::duration_cast(chrono::high_resolution_clock::now() - start).count() << endl; + // cout << "interval treći " << rtime_ms() - start << endl; // }, 3000); // timeout time1 ( [&] () { - // cout << "Close interval 1 i 2 " << chrono::duration_cast(chrono::high_resolution_clock::now() - start).count() << endl; + // cout << "Close interval 1 i 2 " << rtime_ms() - start << endl; // inter1.clear(); // inter2.clear(); // }, 10000); // timeout time2 ([&] () { - // cout << "Close interval 3 " << chrono::duration_cast(chrono::high_resolution_clock::now() - start).count() << endl; + // cout << "Close interval 3 " << rtime_ms() - start << endl; // inter3.clear(); + // time1.clear(); // }, 2000); - // cout << "zadataka: " << on_async.count_tasks() << " niti: " << on_async.count_threads() << endl; + // ------------------------ MAKE FUNCTIONS ASYNCHRONOUS ------------------------- + /** + * Put task directly and get returned value - it is not recommended to use it + */ - // for (int i = 0; i < 8; ++i) { - // pool.put_task( [&] (int id) { - // this_thread::sleep_for(chrono::seconds(1)); - // cout << a*i << endl; - // }, i); - // } - - // auto res1 = pool.put_task( [] () { + // auto res1 = on_async.put_task( [] () { // cout << "Jebiga " < ev2int; // event evintString; + // event<> evoid; // ev2int.on("sum", [](int a, int b) { // cout << "Sum " << a+b << endl; @@ -99,15 +183,39 @@ int main () { // cout << "Substract " << a-stoi(b) << endl; // }); - // sleep(5); + // evoid.on("void", []() { + // cout << "Void emited" << endl; + // }); + + // sleep(1); + + /** + * Emit + */ // ev2int.emit("sum", 5, 8); - // sleep(2); + // sleep(1); // evintString.emit("substract", 3, to_string(2)); + // sleep(1); + // evoid.emit("void"); + + /** + * Own class + */ + + // myOwnClass myclass; + + // timeout t( [&] { + // myclass.emit("constructed", 1); + // }, 200); + + // myclass.on("constructed", [] (int i) { + // cout << "Constructed " << i << endl; + // }); - sleep(1000); + sleep(10000); // only for testing return 0; }