aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/MangaCombined.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/MangaCombined.cpp')
-rw-r--r--src/plugins/MangaCombined.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/plugins/MangaCombined.cpp b/src/plugins/MangaCombined.cpp
index 1745ee0..5440871 100644
--- a/src/plugins/MangaCombined.cpp
+++ b/src/plugins/MangaCombined.cpp
@@ -23,10 +23,14 @@ namespace QuickMedia {
int accumulated_sleep_time = 0;
while(true) {
+ size_t num_dead_threads = 0;
for(size_t i = 0; i < search_threads.size(); ++i) {
auto &search_thread = search_threads[i];
- if(!search_thread.second.valid())
+ if(!search_thread.second.valid()) {
+ if(!plugin_finished_state[i].second)
+ ++num_dead_threads;
continue;
+ }
if(!search_thread.second.ready())
continue;
@@ -40,6 +44,9 @@ namespace QuickMedia {
}
}
+ if(num_dead_threads == search_threads.size())
+ break;
+
size_t num_finished_plugins = 0;
for(auto &f : plugin_finished_state) {
if(f.second)
@@ -58,7 +65,7 @@ namespace QuickMedia {
break;
}
- int sleep_time_ms = 200;
+ int sleep_time_ms = 50;
std::this_thread::sleep_for(std::chrono::milliseconds(sleep_time_ms));
accumulated_sleep_time += sleep_time_ms;
if(accumulated_sleep_time >= SEARCH_TIMEOUT_MILLISECONDS) {
@@ -114,4 +121,11 @@ namespace QuickMedia {
if(!page) return PluginResult::OK;
return page->submit(title, url, result_tabs);
}
+
+ void MangaCombinedSearchPage::cancel_operation() {
+ for(auto &search_thread : search_threads) {
+ search_thread.second.cancel();
+ }
+ search_threads.clear();
+ }
} \ No newline at end of file