diff --git a/sane/scanner.cpp b/sane/scanner.cpp index 6860cd9..b3c2fc3 100644 --- a/sane/scanner.cpp +++ b/sane/scanner.cpp @@ -807,8 +807,27 @@ void scanner::scan_done(void) { std::string msg(scan_msg_); - while (images_.count()) - std::this_thread::sleep_for(std::chrono::milliseconds(5)); + if (err_ != SCANNER_ERR_USER_CANCELED) + { + int cnt = images_.count(), elapse = 0, + unit = 5, total = 1000; + + while (cnt) + { + std::this_thread::sleep_for(std::chrono::milliseconds(unit)); + elapse++; + if (cnt == images_.count()) + { + if (elapse >= total / unit) + break; + } + else + { + elapse = 0; + } + cnt = images_.count(); + } + } if (indicator_) indicator_->notify_scan_over(&msg[0], err_ != SCANNER_ERR_OK); diff --git a/twain/twain/huagaods.cpp b/twain/twain/huagaods.cpp index 579b502..277118f 100644 --- a/twain/twain/huagaods.cpp +++ b/twain/twain/huagaods.cpp @@ -1699,7 +1699,7 @@ Result huagao_ds::call(const Identity& origin, DataGroup dg, Dat dat, Msg msg, v //trigger_ProcessEvent(dg, dat, msg); // some APPs may be not trigger (Control, Event, ProcessEvent), we help them :( ... // 浜戦槄鍗锋壂鎻忕涓嶇瓑鐘舵€佹敼鍙橈紝鐩存帴鍙栧浘锛屾澶勮缃竴娆$姸鎬?2022-11-07 rt = Base::call(origin, dg, dat, msg, data); - if (log_all_triple_ || ((int)rt.returnCode() && rt.returnCode() != ReturnCode::NotDsEvent)) + if (log_all_triple_ || ((int)rt.returnCode() && rt.returnCode() != ReturnCode::NotDsEvent && msg != Msg::ProcessEvent)) { wchar_t dgs[20] = { 0 }, dts[20] = { 0 }, ms[20] = { 0 }, ss[20] = { 0 }, rcs[20] = { 0 }, cs[20] = { 0 }; if (dat == Dat::Capability)