mirror of
https://github.com/tribufu/sdk-cpp
synced 2025-06-16 18:54:18 +00:00
Add libhv and test http client
This commit is contained in:
49
vendor/libhv/include/hv/hasync.h
vendored
Normal file
49
vendor/libhv/include/hv/hasync.h
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
#ifndef HV_ASYNC_H_
|
||||
#define HV_ASYNC_H_
|
||||
|
||||
#include "hexport.h"
|
||||
#include "hthreadpool.h"
|
||||
#include "singleton.h"
|
||||
|
||||
namespace hv {
|
||||
|
||||
class HV_EXPORT GlobalThreadPool : public HThreadPool {
|
||||
SINGLETON_DECL(GlobalThreadPool)
|
||||
protected:
|
||||
GlobalThreadPool() : HThreadPool() {}
|
||||
~GlobalThreadPool() {}
|
||||
};
|
||||
|
||||
/*
|
||||
* return a future, calling future.get() will wait task done and return RetType.
|
||||
* async(fn, args...)
|
||||
* async(std::bind(&Class::mem_fn, &obj))
|
||||
* async(std::mem_fn(&Class::mem_fn, &obj))
|
||||
*
|
||||
*/
|
||||
template<class Fn, class... Args>
|
||||
auto async(Fn&& fn, Args&&... args) -> std::future<decltype(fn(args...))> {
|
||||
return GlobalThreadPool::instance()->commit(std::forward<Fn>(fn), std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
class async {
|
||||
public:
|
||||
static void startup(int min_threads = DEFAULT_THREAD_POOL_MIN_THREAD_NUM,
|
||||
int max_threads = DEFAULT_THREAD_POOL_MAX_THREAD_NUM,
|
||||
int max_idle_ms = DEFAULT_THREAD_POOL_MAX_IDLE_TIME) {
|
||||
GlobalThreadPool* gtp = GlobalThreadPool::instance();
|
||||
if (gtp->isStarted()) return;
|
||||
gtp->setMinThreadNum(min_threads);
|
||||
gtp->setMaxThreadNum(max_threads);
|
||||
gtp->setMaxIdleTime(max_idle_ms);
|
||||
gtp->start();
|
||||
}
|
||||
|
||||
static void cleanup() {
|
||||
GlobalThreadPool::exitInstance();
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace hv
|
||||
|
||||
#endif // HV_ASYNC_H_
|
Reference in New Issue
Block a user