Split html timed fetch into 2 classes
Signed-off-by: King_DuckZ <king_duckz@gmx.com>
This commit is contained in:
parent
3ab4f916d8
commit
fb69fd2289
2 changed files with 37 additions and 13 deletions
|
@ -6,33 +6,25 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <taskflow/taskflow.hpp>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace duck {
|
namespace duck {
|
||||||
namespace {
|
namespace {
|
||||||
auto time_rand = std::bind(std::uniform_int_distribution<int>(2, 8), std::mt19937(std::time(0)));
|
auto time_rand = std::bind(std::uniform_int_distribution<int>(2, 8), std::mt19937(std::time(0)));
|
||||||
|
|
||||||
class HtmlFetchTimer : public ev::timer {
|
class HtmlFetchTimer : public EvTimerTask {
|
||||||
public:
|
public:
|
||||||
HtmlFetchTimer (ev::loop_ref& loop, tf::Subflow* subflow, std::string&& url) :
|
HtmlFetchTimer (ev::loop_ref& loop, tf::Subflow* subflow, std::string&& url) :
|
||||||
m_subflow(subflow),
|
EvTimerTask(static_cast<double>(time_rand()), loop, subflow),
|
||||||
m_url(std::move(url))
|
m_url(std::move(url))
|
||||||
{
|
{
|
||||||
this->set(loop);
|
|
||||||
this->set<HtmlFetchTimer, &HtmlFetchTimer::on_timer>(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_timer() {
|
virtual void on_timer() override {
|
||||||
m_subflow->emplace([this]() {std::cout << "Timer elapsed for " << m_url << "!\n";});
|
subflow().emplace([this]() {std::cout << "Timer elapsed for " << m_url << "!\n";});
|
||||||
}
|
|
||||||
|
|
||||||
void start (double delay) {
|
|
||||||
ev::timer::start(delay, 0.0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
tf::Subflow* m_subflow;
|
|
||||||
std::string m_url;
|
std::string m_url;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -57,7 +49,6 @@ namespace {
|
||||||
private:
|
private:
|
||||||
void main_loop (tf::Subflow& subflow) {
|
void main_loop (tf::Subflow& subflow) {
|
||||||
m_timer = std::make_unique<HtmlFetchTimer>(m_loop, &subflow, "lalalala");
|
m_timer = std::make_unique<HtmlFetchTimer>(m_loop, &subflow, "lalalala");
|
||||||
m_timer->start(static_cast<double>(time_rand()));
|
|
||||||
|
|
||||||
this->m_loop.run(0);
|
this->m_loop.run(0);
|
||||||
}
|
}
|
||||||
|
@ -69,6 +60,22 @@ namespace {
|
||||||
};
|
};
|
||||||
} //unnamed namespace
|
} //unnamed namespace
|
||||||
|
|
||||||
|
EvTimerTask::EvTimerTask (double delay, ev::loop_ref& loop, tf::Subflow* subflow) :
|
||||||
|
m_subflow(subflow)
|
||||||
|
{
|
||||||
|
this->set(loop);
|
||||||
|
this->set<EvTimerTask, &EvTimerTask::on_timer_ev>(this);
|
||||||
|
ev::timer::start(delay, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
tf::Subflow& EvTimerTask::subflow() {
|
||||||
|
return *m_subflow;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EvTimerTask::on_timer_ev() {
|
||||||
|
this->on_timer();
|
||||||
|
}
|
||||||
|
|
||||||
void test() {
|
void test() {
|
||||||
//const auto processor_count = std::thread::hardware_concurrency();
|
//const auto processor_count = std::thread::hardware_concurrency();
|
||||||
EvThreadPool worker; //(std::max(2U, processor_count) - 1);
|
EvThreadPool worker; //(std::max(2U, processor_count) - 1);
|
||||||
|
|
|
@ -1,5 +1,22 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <ev++.h>
|
||||||
|
#include <taskflow/taskflow.hpp>
|
||||||
|
|
||||||
namespace duck {
|
namespace duck {
|
||||||
|
class EvTimerTask : public ev::timer {
|
||||||
|
public:
|
||||||
|
EvTimerTask (double delay, ev::loop_ref&, tf::Subflow*);
|
||||||
|
virtual ~EvTimerTask() noexcept = default;
|
||||||
|
|
||||||
|
virtual void on_timer() = 0;
|
||||||
|
tf::Subflow& subflow();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void on_timer_ev();
|
||||||
|
|
||||||
|
tf::Subflow* m_subflow;
|
||||||
|
};
|
||||||
|
|
||||||
void test();
|
void test();
|
||||||
} //namespace duck
|
} //namespace duck
|
||||||
|
|
Loading…
Reference in a new issue