Merge branch 'master' of https://github.com/sunyinqi0508/AQuery2
This commit is contained in:
+2
-2
@@ -153,9 +153,9 @@ extern "C" int __DLLEXPORT__ main(int argc, char** argv) {
|
||||
#ifdef THREADING
|
||||
auto tp = new ThreadPool();
|
||||
cxt->thread_pool = tp;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
const char* shmname;
|
||||
if (argc < 0)
|
||||
return dll_main(argc, argv, cxt);
|
||||
|
||||
+40
-13
@@ -3,22 +3,22 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
typedef int(*payload_fn_t)(void*);
|
||||
struct payload_t{
|
||||
payload_fn_t f;
|
||||
void* args;
|
||||
constexpr payload_t(payload_fn_t f, void* args) noexcept
|
||||
: f(f), args(args) {}
|
||||
constexpr payload_t() noexcept
|
||||
: f(nullptr), args(nullptr) {};
|
||||
bool is_empty() const { return f && args; }
|
||||
void empty() { f = nullptr; args = nullptr; }
|
||||
void operator()() { f(args); }
|
||||
};
|
||||
|
||||
class ThreadPool{
|
||||
|
||||
public:
|
||||
typedef void(*payload_fn_t)(void*);
|
||||
|
||||
struct payload_t{
|
||||
payload_fn_t f;
|
||||
void* args;
|
||||
constexpr payload_t(payload_fn_t f, void* args) noexcept
|
||||
: f(f), args(args) {}
|
||||
constexpr payload_t() noexcept
|
||||
: f(nullptr), args(nullptr) {};
|
||||
bool is_empty() const { return f && args; }
|
||||
void empty() { f = nullptr; args = nullptr; }
|
||||
void operator()() { f(args); }
|
||||
};
|
||||
ThreadPool(uint32_t n_threads = 0);
|
||||
void enqueue_task(const payload_t& payload);
|
||||
bool busy();
|
||||
@@ -39,4 +39,31 @@ private:
|
||||
|
||||
};
|
||||
|
||||
class Trigger{
|
||||
private:
|
||||
void* triggers; //min-heap by t-rem
|
||||
virtual void tick() = 0;
|
||||
|
||||
public:
|
||||
Trigger(ThreadPool* tp);
|
||||
};
|
||||
|
||||
class IntervalBasedTrigger : public Trigger{
|
||||
public:
|
||||
struct timer{
|
||||
uint32_t interval; // in milliseconds
|
||||
uint32_t time_remaining;
|
||||
};
|
||||
void add_trigger();
|
||||
private:
|
||||
void tick() override;
|
||||
};
|
||||
|
||||
class CallbackBasedTrigger : public Trigger{
|
||||
public:
|
||||
void add_trigger();
|
||||
private:
|
||||
void tick() override;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user