From 461020ea72539eed31f9af0b31ade226c17232b6 Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Mon, 20 Nov 2023 18:09:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=94=E5=B2=B3=E6=99=BA?= =?UTF-8?q?=E8=83=BDtwain-app=E6=89=AB=E6=8F=8F=E6=97=B6=E5=8D=A1=E4=BD=8F?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/twainui/Manager.cpp | 46 ++++++++++++++++++++++++++----------- modules/twainui/Manager.h | 4 ++-- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/modules/twainui/Manager.cpp b/modules/twainui/Manager.cpp index c3da90fb..c8f76591 100644 --- a/modules/twainui/Manager.cpp +++ b/modules/twainui/Manager.cpp @@ -25,7 +25,7 @@ Manager::Manager() connect(this, SIGNAL(init()), this, SLOT(on_init())); connect(this, SIGNAL(createDeviceSelect(unsigned int)), this, SLOT(on_createDeviceSelect(unsigned int))); connect(this, SIGNAL(createSettingUi(unsigned int)), this, SLOT(on_createSettingUi(unsigned int))); - connect(this, SIGNAL(createProgressUi(unsigned int)), this, SLOT(on_createProgressUi(unsigned int))); + connect(this, SIGNAL(createProgressUi(void *)), this, SLOT(on_createProgressUi(void *))); connect(this, SIGNAL(createMessageBoxUi(unsigned int)), this, SLOT(on_createMessageBoxUi(unsigned int))); connect(this, SIGNAL(createTwainSrcUi(unsigned int)), this, SLOT(on_createTwainSrcUi(unsigned int))); connect(this, SIGNAL(createSaneSrcUi(unsigned int)), this, SLOT(on_createSaneSrcUi(unsigned int))); @@ -105,27 +105,46 @@ int Manager::showProgressUi(HWND parent, std::function callbac m_progressUiCallback = callback; m_notify = notify; - unsigned int ThreadId = 0; + void *hStopEvent = nullptr; #ifdef HG_CMP_MSC if (qApp->thread() != QThread::currentThread()) { - ThreadId = GetCurrentThreadId(); - HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::showProgressUi] qApp->thread() != QThread::currentThread(), ThreadId=%u", ThreadId); + hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0); } #endif - emit createProgressUi(ThreadId); + emit createProgressUi(hStopEvent); HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::showProgressUi] emit createProgressUi(ThreadId)"); #ifdef HG_CMP_MSC - if (0 != ThreadId) + if (nullptr != hStopEvent) { - MSG msg; - while (GetMessage(&msg, NULL, 0, 0)) + while (1) { - TranslateMessage(&msg); - DispatchMessage(&msg); + MSG msg; + while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + HANDLE arEvents[1] = { hStopEvent }; + DWORD result = MsgWaitForMultipleObjectsEx(1, arEvents, INFINITE, QS_ALLINPUT, MWMO_ALERTABLE); + if (result == WAIT_OBJECT_0 + 1) // msg received + { + continue; + } + else if (result == WAIT_OBJECT_0) + { + break; + } + else if (result == WAIT_IO_COMPLETION) + { + break; + } } + + CloseHandle(hStopEvent); } #endif @@ -398,7 +417,7 @@ void Manager::on_createSettingUi(unsigned int ThreadId) HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createSettingUi] m_settingUi->show()"); } -void Manager::on_createProgressUi(unsigned int ThreadId) +void Manager::on_createProgressUi(void *hEvent) { if (nullptr != m_settingUi) m_progressUiparent = (HGWindow)m_settingUi->winId(); @@ -432,10 +451,9 @@ void Manager::on_createProgressUi(unsigned int ThreadId) HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createProgressUi] m_progressUi->show()"); #ifdef HG_CMP_MSC - if (0 != ThreadId) + if (nullptr != hEvent) { - ::PostThreadMessage(ThreadId, WM_QUIT, 0, 0); - HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createProgressUi] PostThreadMessage(ThreadId, WM_QUIT, 0, 0)"); + SetEvent((HANDLE)hEvent); } #endif } diff --git a/modules/twainui/Manager.h b/modules/twainui/Manager.h index 25007563..78073f41 100644 --- a/modules/twainui/Manager.h +++ b/modules/twainui/Manager.h @@ -36,7 +36,7 @@ signals: void init(); void createDeviceSelect(unsigned int ThreadId); void createSettingUi(unsigned int ThreadId); - void createProgressUi(unsigned int ThreadId); + void createProgressUi(void *hEvent); void createMessageBoxUi(unsigned int ThreadId); void createTwainSrcUi(unsigned int ThreadId); void createSaneSrcUi(unsigned int ThreadId); @@ -50,7 +50,7 @@ private slots: void on_init(); void on_createDeviceSelect(unsigned int ThreadId); void on_createSettingUi(unsigned int ThreadId); - void on_createProgressUi(unsigned int ThreadId); + void on_createProgressUi(void *hEvent); void on_createMessageBoxUi(unsigned int ThreadId); void on_createTwainSrcUi(unsigned int ThreadId); void on_createSaneSrcUi(unsigned int ThreadId);