#pragma once typedef std::vector> DataSet; typedef void (*AsyncDBOnOkFunc)(a8::XParams& param, const DataSet* data_set); typedef void (*AsyncDBOnErrorFunc)(a8::XParams& param, int error_code, const std::string& error_msg); struct AsyncQueryRequest; class DBThread; class DBPool : public a8::Singleton { private: DBPool() {}; friend class a8::Singleton; public: void Init(); void UnInit(); void SetThreadNum(int thread_num); //执行异步并行查询 void ExecAsyncQuery(a8::XObject conn_info, const char* querystr, std::initializer_list args, a8::XParams param, AsyncDBOnOkFunc on_ok, AsyncDBOnErrorFunc on_error, long long hash_code); //执行异步并行sql void ExecAsyncScript(a8::XObject conn_info, const char* querystr, std::initializer_list args, a8::XParams param, AsyncDBOnOkFunc on_ok, AsyncDBOnErrorFunc on_error, long long hash_code); private: AsyncQueryRequest* GetAsyncQueryRequest(long long seqid); void AsyncSqlOnOk(long long seqid, DataSet* data_set); void AsyncSqlOnError(long long seqid, int errcode, const std::string& errmsg); private: long long curr_seqid_ = 0; std::map async_query_hash_; unsigned short exec_async_query_msgid_ = 0; std::vector db_thread_pool_; };