#pragma once #include #include #include #include #include #include class TiMapTask; /** * @brief The TiMapCacheWorker class * /缓冲\读取 瓦片的线程 */ class TiMapCacheWorker : public QThread { Q_OBJECT public: TiMapCacheWorker(); void quit(); bool enqueueTask(TiMapTask* task); void setDBName(const QString& path); // QThread interface protected: void run() override; private: void runTask(TiMapTask* task); void clear(); bool init(); bool openDB(); bool createDB(QSqlDatabase& db, bool createDefault = true); void closeDB(); void testInternet(TiMapTask* task); bool testTask(TiMapTask* task); void getTile(TiMapTask* task); void saveTile(TiMapTask* task); private: QString m_dbPath; QMutex m_taskQueueMutex; QWaitCondition m_waitCond; QQueue m_taskQueue; QScopedPointer m_db; std::atomic_bool m_valid; // 数据库是否有效,有效指数据库打开并已初始化化 std::atomic_bool m_isInit; int m_hostLookupID = 0; };