Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions src/dfm-search/dfm-search-lib/core/genericsearchengine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,16 @@ void GenericSearchEngine::init()
m_worker = new SearchWorker();
m_worker->moveToThread(&m_workerThread);

// 连接信号
// 连接线程生命周期信号
connect(&m_workerThread, &QThread::finished, m_worker, &QObject::deleteLater);

// 连接工作对象的信号
// 连接控制信号(主线程 -> 工作线程)
connect(this, &GenericSearchEngine::requestSearch,
m_worker, &SearchWorker::doSearch);
connect(this, &GenericSearchEngine::requestCancel,
m_worker, &SearchWorker::cancelSearch);

// 连接结果信号(工作线程 -> 主线程)
connect(m_worker, &SearchWorker::resultFound,
this, &GenericSearchEngine::handleSearchResult);
connect(m_worker, &SearchWorker::searchFinished,
Expand Down Expand Up @@ -110,11 +116,8 @@ void GenericSearchEngine::search(const SearchQuery &query)
return;
}

// 执行异步搜索
QMetaObject::invokeMethod(m_worker, "doSearch",
Q_ARG(DFMSEARCH::SearchQuery, query),
Q_ARG(DFMSEARCH::SearchOptions, m_options),
Q_ARG(DFMSEARCH::SearchType, searchType()));
// 发射信号请求工作线程执行搜索
emit requestSearch(query, m_options, searchType());
}

void GenericSearchEngine::searchWithCallback(const SearchQuery &query,
Expand Down Expand Up @@ -143,8 +146,8 @@ void GenericSearchEngine::cancel()
{
m_cancelled.store(true);

// 通知工作线程取消搜索
QMetaObject::invokeMethod(m_worker, "cancelSearch", Qt::DirectConnection);
// 发射信号请求工作线程取消搜索
emit requestCancel();

// 停止批处理定时器
m_batchTimer.stop();
Expand Down Expand Up @@ -230,11 +233,8 @@ SearchResultExpected GenericSearchEngine::doSyncSearch(const SearchQuery &query)
connect(this, &GenericSearchEngine::errorOccurred, &eventLoop, &QEventLoop::quit);
connect(&timeoutTimer, &QTimer::timeout, &eventLoop, &QEventLoop::quit);

// 启动异步搜索
QMetaObject::invokeMethod(m_worker, "doSearch",
Q_ARG(DFMSEARCH::SearchQuery, query),
Q_ARG(DFMSEARCH::SearchOptions, m_options),
Q_ARG(DFMSEARCH::SearchType, searchType()));
// 发射信号启动异步搜索
emit requestSearch(query, m_options, searchType());

// 启动超时计时器
timeoutTimer.start();
Expand All @@ -244,7 +244,7 @@ SearchResultExpected GenericSearchEngine::doSyncSearch(const SearchQuery &query)

// 检查是否超时
if (!timeoutTimer.isActive()) {
QMetaObject::invokeMethod(m_worker, "cancelSearch");
emit requestCancel();
return DUnexpected<DFMSEARCH::SearchError> { SearchError(SearchErrorCode::SearchTimeout) };
}

Expand Down
13 changes: 13 additions & 0 deletions src/dfm-search/dfm-search-lib/core/genericsearchengine.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,19 @@ class GenericSearchEngine : public AbstractSearchEngine
*/
void cancel() override;

Q_SIGNALS:
/**
* @brief Internal signal to request worker thread to execute search
*/
void requestSearch(const DFMSEARCH::SearchQuery &query,
const DFMSEARCH::SearchOptions &options,
DFMSEARCH::SearchType searchType);

/**
* @brief Internal signal to request worker thread to cancel search
*/
void requestCancel();

protected:
/**
* @brief Set up the strategy factory for this search engine
Expand Down
Loading