解决五岳智能twain-app扫描时卡住的问题
This commit is contained in:
parent
e297b2cc9f
commit
461020ea72
|
@ -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<void (ui_result)> 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
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue