twainui解决其他模态窗口可能的卡住问题
This commit is contained in:
parent
461020ea72
commit
df6eff0638
|
@ -23,17 +23,17 @@ Manager::Manager()
|
|||
qRegisterMetaType<HGImage>("HGImage");
|
||||
|
||||
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(createDeviceSelect(void *)), this, SLOT(on_createDeviceSelect(void *)));
|
||||
connect(this, SIGNAL(createSettingUi(void *)), this, SLOT(on_createSettingUi(void *)));
|
||||
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)));
|
||||
connect(this, SIGNAL(createAbnormalImgUi(unsigned int, HGImage)), this, SLOT(on_createAbnormalImgUi(unsigned int, HGImage)));
|
||||
connect(this, SIGNAL(createMessageBoxUi(void *)), this, SLOT(on_createMessageBoxUi(void *)));
|
||||
connect(this, SIGNAL(createTwainSrcUi(void *)), this, SLOT(on_createTwainSrcUi(void *)));
|
||||
connect(this, SIGNAL(createSaneSrcUi(void *)), this, SLOT(on_createSaneSrcUi(void *)));
|
||||
connect(this, SIGNAL(createAbnormalImgUi(void *, HGImage)), this, SLOT(on_createAbnormalImgUi(void *, HGImage)));
|
||||
|
||||
connect(this, SIGNAL(deleteSettingUi(unsigned int)), this, SLOT(on_deleteSettingUi(unsigned int)));
|
||||
connect(this, SIGNAL(deleteProgressUi(unsigned int)), this, SLOT(on_deleteProgressUi(unsigned int)));
|
||||
connect(this, SIGNAL(deleteMessageBoxUi(unsigned int)), this, SLOT(on_deleteMessageBoxUi(unsigned int)));
|
||||
connect(this, SIGNAL(deleteSettingUi(void *)), this, SLOT(on_deleteSettingUi(void *)));
|
||||
connect(this, SIGNAL(deleteProgressUi(void *)), this, SLOT(on_deleteProgressUi(void *)));
|
||||
connect(this, SIGNAL(deleteMessageBoxUi(void *)), this, SLOT(on_deleteMessageBoxUi(void *)));
|
||||
|
||||
emit init();
|
||||
}
|
||||
|
@ -50,22 +50,21 @@ int Manager::showDeviceSelect(const std::vector<DEVQUEUI>& devs)
|
|||
// param
|
||||
m_DeviceSelectDevs = devs;
|
||||
|
||||
unsigned int ThreadId = 0;
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
if (qApp->thread() != QThread::currentThread())
|
||||
ThreadId = GetCurrentThreadId();
|
||||
{
|
||||
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
emit createDeviceSelect(ThreadId);
|
||||
emit createDeviceSelect(hStopEvent);
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (0 != ThreadId)
|
||||
if (nullptr != hStopEvent)
|
||||
{
|
||||
MSG msg;
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
msgLoop(hStopEvent);
|
||||
CloseHandle(hStopEvent);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -84,16 +83,15 @@ int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const
|
|||
m_with_scan = with_scan;
|
||||
m_settingUiCallback = callback;
|
||||
|
||||
unsigned int ThreadId = 0;
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
if (qApp->thread() != QThread::currentThread())
|
||||
{
|
||||
ThreadId = GetCurrentThreadId();
|
||||
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::showSettingUi] qApp->thread() != QThread::currentThread(), ThreadId=%u", ThreadId);
|
||||
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
emit createSettingUi(ThreadId);
|
||||
emit createSettingUi(hStopEvent);
|
||||
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::showSettingUi] emit createSettingUi(ThreadId)");
|
||||
return 0;
|
||||
}
|
||||
|
@ -119,31 +117,7 @@ int Manager::showProgressUi(HWND parent, std::function<void (ui_result)> callbac
|
|||
#ifdef HG_CMP_MSC
|
||||
if (nullptr != hStopEvent)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
msgLoop(hStopEvent);
|
||||
CloseHandle(hStopEvent);
|
||||
}
|
||||
#endif
|
||||
|
@ -160,22 +134,21 @@ int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag)
|
|||
m_message = (char*)msg;
|
||||
m_flag = flag;
|
||||
|
||||
unsigned int ThreadId = 0;
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
if (qApp->thread() != QThread::currentThread())
|
||||
ThreadId = GetCurrentThreadId();
|
||||
{
|
||||
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
emit createMessageBoxUi(ThreadId);
|
||||
emit createMessageBoxUi(hStopEvent);
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (0 != ThreadId)
|
||||
if (nullptr != hStopEvent)
|
||||
{
|
||||
MSG msg;
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
msgLoop(hStopEvent);
|
||||
CloseHandle(hStopEvent);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -193,22 +166,21 @@ int Manager::showTwainSrcUi(const TW_IDENTITY *vds, HGUInt count, const char* de
|
|||
m_defDsName = defDevName;
|
||||
memset(&m_ds, 0, sizeof(TW_IDENTITY));
|
||||
|
||||
unsigned int ThreadId = 0;
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
if (qApp->thread() != QThread::currentThread())
|
||||
ThreadId = GetCurrentThreadId();
|
||||
{
|
||||
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
emit createTwainSrcUi(ThreadId);
|
||||
emit createTwainSrcUi(hStopEvent);
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (0 != ThreadId)
|
||||
if (nullptr != hStopEvent)
|
||||
{
|
||||
MSG msg;
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
msgLoop(hStopEvent);
|
||||
CloseHandle(hStopEvent);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -239,22 +211,21 @@ int Manager::showSaneSrcUi(const char **manuNames, const char **sanePaths, HGWin
|
|||
memset(&m_saneApi, 0, sizeof(SANEAPI));
|
||||
m_saneManuName.clear();
|
||||
|
||||
unsigned int ThreadId = 0;
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
if (qApp->thread() != QThread::currentThread())
|
||||
ThreadId = GetCurrentThreadId();
|
||||
{
|
||||
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
emit createSaneSrcUi(ThreadId);
|
||||
emit createSaneSrcUi(hStopEvent);
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (0 != ThreadId)
|
||||
if (nullptr != hStopEvent)
|
||||
{
|
||||
MSG msg;
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
msgLoop(hStopEvent);
|
||||
CloseHandle(hStopEvent);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -287,22 +258,21 @@ int Manager::showAbnormalImgUi(SANE_Image *img)
|
|||
HGImage image = NULL;
|
||||
HGBase_CreateImageWithData(img->data, &imgInfo, &image);
|
||||
|
||||
unsigned int ThreadId = 0;
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
if (qApp->thread() != QThread::currentThread())
|
||||
ThreadId = GetCurrentThreadId();
|
||||
{
|
||||
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
emit createAbnormalImgUi(ThreadId, image);
|
||||
emit createAbnormalImgUi(hStopEvent, image);
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (0 != ThreadId)
|
||||
if (nullptr != hStopEvent)
|
||||
{
|
||||
MSG msg;
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
msgLoop(hStopEvent);
|
||||
CloseHandle(hStopEvent);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -313,35 +283,41 @@ int Manager::showAbnormalImgUi(SANE_Image *img)
|
|||
|
||||
void Manager::closeSettingUi()
|
||||
{
|
||||
unsigned int ThreadId = 0;
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
if (qApp->thread() != QThread::currentThread())
|
||||
ThreadId = GetCurrentThreadId();
|
||||
{
|
||||
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
emit deleteSettingUi(ThreadId);
|
||||
emit deleteSettingUi(hStopEvent);
|
||||
}
|
||||
|
||||
void Manager::closeProgressUi()
|
||||
{
|
||||
unsigned int ThreadId = 0;
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
if (qApp->thread() != QThread::currentThread())
|
||||
ThreadId = GetCurrentThreadId();
|
||||
{
|
||||
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
emit deleteProgressUi(ThreadId);
|
||||
emit deleteProgressUi(hStopEvent);
|
||||
}
|
||||
|
||||
void Manager::closeMessageBoxUi()
|
||||
{
|
||||
unsigned int ThreadId = 0;
|
||||
void *hStopEvent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
if (qApp->thread() != QThread::currentThread())
|
||||
ThreadId = GetCurrentThreadId();
|
||||
{
|
||||
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
emit deleteMessageBoxUi(ThreadId);
|
||||
emit deleteMessageBoxUi(hStopEvent);
|
||||
}
|
||||
|
||||
void Manager::clear_functions(void)
|
||||
|
@ -355,6 +331,38 @@ void Manager::clear_functions(void)
|
|||
m_settingUi->clear_callback();
|
||||
}
|
||||
|
||||
void Manager::msgLoop(void *hEvent)
|
||||
{
|
||||
#ifdef HG_CMP_MSC
|
||||
assert(nullptr != hEvent);
|
||||
|
||||
while (1)
|
||||
{
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
HANDLE arEvents[1] = { hEvent };
|
||||
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;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Manager::on_init()
|
||||
{
|
||||
m_langCode = lang_get_cur_code_page();
|
||||
|
@ -373,21 +381,21 @@ void Manager::on_init()
|
|||
QCoreApplication::installTranslator(&m_translator_qt);
|
||||
}
|
||||
|
||||
void Manager::on_createDeviceSelect(unsigned int ThreadId)
|
||||
void Manager::on_createDeviceSelect(void *hEvent)
|
||||
{
|
||||
Dialog_device_select dlg(m_DeviceSelectDevs);
|
||||
dlg.exec();
|
||||
m_DeviceSelectResult = dlg.getDevId();
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (0 != ThreadId)
|
||||
if (nullptr != hEvent)
|
||||
{
|
||||
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
|
||||
SetEvent((HANDLE)hEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Manager::on_createSettingUi(unsigned int ThreadId)
|
||||
void Manager::on_createSettingUi(void *hEvent)
|
||||
{
|
||||
QWidget *qParent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
|
@ -448,8 +456,8 @@ void Manager::on_createProgressUi(void *hEvent)
|
|||
m_progressUi = new Dialog_progress_ui(this, close_prog, m_notify, qParent);
|
||||
m_progressUi->setModal(true);
|
||||
m_progressUi->show();
|
||||
|
||||
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createProgressUi] m_progressUi->show()");
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (nullptr != hEvent)
|
||||
{
|
||||
|
@ -458,7 +466,7 @@ void Manager::on_createProgressUi(void *hEvent)
|
|||
#endif
|
||||
}
|
||||
|
||||
void Manager::on_createMessageBoxUi(unsigned int ThreadId)
|
||||
void Manager::on_createMessageBoxUi(void *hEvent)
|
||||
{
|
||||
QWidget *qParent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
|
@ -477,14 +485,14 @@ void Manager::on_createMessageBoxUi(unsigned int ThreadId)
|
|||
dlg.exec();
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (0 != ThreadId)
|
||||
if (nullptr != hEvent)
|
||||
{
|
||||
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
|
||||
SetEvent((HANDLE)hEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Manager::on_createTwainSrcUi(unsigned int ThreadId)
|
||||
void Manager::on_createTwainSrcUi(void *hEvent)
|
||||
{
|
||||
QWidget *qParent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
|
@ -505,14 +513,14 @@ void Manager::on_createTwainSrcUi(unsigned int ThreadId)
|
|||
}
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (0 != ThreadId)
|
||||
if (nullptr != hEvent)
|
||||
{
|
||||
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
|
||||
SetEvent((HANDLE)hEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Manager::on_createSaneSrcUi(unsigned int ThreadId)
|
||||
void Manager::on_createSaneSrcUi(void *hEvent)
|
||||
{
|
||||
QWidget *qParent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
|
@ -535,28 +543,28 @@ void Manager::on_createSaneSrcUi(unsigned int ThreadId)
|
|||
}
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (0 != ThreadId)
|
||||
if (nullptr != hEvent)
|
||||
{
|
||||
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
|
||||
SetEvent((HANDLE)hEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Manager::on_createAbnormalImgUi(unsigned int ThreadId, HGImage image)
|
||||
void Manager::on_createAbnormalImgUi(void *hEvent, HGImage image)
|
||||
{
|
||||
Dialog_abnormal_img_select dlg(image, m_progressUi);
|
||||
dlg.exec();
|
||||
m_abnormalImgResult = dlg.getUserSelect();
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
if (0 != ThreadId)
|
||||
if (nullptr != hEvent)
|
||||
{
|
||||
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
|
||||
SetEvent((HANDLE)hEvent);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void Manager::on_deleteSettingUi(unsigned int ThreadId)
|
||||
void Manager::on_deleteSettingUi(void *hEvent)
|
||||
{
|
||||
if (m_settingUi != nullptr)
|
||||
{
|
||||
|
@ -566,7 +574,7 @@ void Manager::on_deleteSettingUi(unsigned int ThreadId)
|
|||
}
|
||||
}
|
||||
|
||||
void Manager::on_deleteProgressUi(unsigned int ThreadId)
|
||||
void Manager::on_deleteProgressUi(void *hEvent)
|
||||
{
|
||||
if (m_progressUi != nullptr)
|
||||
{
|
||||
|
@ -576,7 +584,7 @@ void Manager::on_deleteProgressUi(unsigned int ThreadId)
|
|||
}
|
||||
}
|
||||
|
||||
void Manager::on_deleteMessageBoxUi(unsigned int ThreadId)
|
||||
void Manager::on_deleteMessageBoxUi(void *hEvent)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -32,33 +32,36 @@ public:
|
|||
|
||||
void clear_functions(void);
|
||||
|
||||
private:
|
||||
void msgLoop(void *hEvent);
|
||||
|
||||
signals:
|
||||
void init();
|
||||
void createDeviceSelect(unsigned int ThreadId);
|
||||
void createSettingUi(unsigned int ThreadId);
|
||||
void createDeviceSelect(void *hEvent);
|
||||
void createSettingUi(void *hEvent);
|
||||
void createProgressUi(void *hEvent);
|
||||
void createMessageBoxUi(unsigned int ThreadId);
|
||||
void createTwainSrcUi(unsigned int ThreadId);
|
||||
void createSaneSrcUi(unsigned int ThreadId);
|
||||
void createAbnormalImgUi(unsigned int ThreadId, HGImage image);
|
||||
void createMessageBoxUi(void *hEvent);
|
||||
void createTwainSrcUi(void *hEvent);
|
||||
void createSaneSrcUi(void *hEvent);
|
||||
void createAbnormalImgUi(void *hEvent, HGImage image);
|
||||
|
||||
void deleteSettingUi(unsigned int ThreadId);
|
||||
void deleteProgressUi(unsigned int ThreadId);
|
||||
void deleteMessageBoxUi(unsigned int ThreadId);
|
||||
void deleteSettingUi(void *hEvent);
|
||||
void deleteProgressUi(void *hEvent);
|
||||
void deleteMessageBoxUi(void *hEvent);
|
||||
|
||||
private slots:
|
||||
void on_init();
|
||||
void on_createDeviceSelect(unsigned int ThreadId);
|
||||
void on_createSettingUi(unsigned int ThreadId);
|
||||
void on_createDeviceSelect(void *hEvent);
|
||||
void on_createSettingUi(void *hEvent);
|
||||
void on_createProgressUi(void *hEvent);
|
||||
void on_createMessageBoxUi(unsigned int ThreadId);
|
||||
void on_createTwainSrcUi(unsigned int ThreadId);
|
||||
void on_createSaneSrcUi(unsigned int ThreadId);
|
||||
void on_createAbnormalImgUi(unsigned int ThreadId, HGImage image);
|
||||
void on_createMessageBoxUi(void *hEvent);
|
||||
void on_createTwainSrcUi(void *hEvent);
|
||||
void on_createSaneSrcUi(void *hEvent);
|
||||
void on_createAbnormalImgUi(void *hEvent, HGImage image);
|
||||
|
||||
void on_deleteSettingUi(unsigned int ThreadId);
|
||||
void on_deleteProgressUi(unsigned int ThreadId);
|
||||
void on_deleteMessageBoxUi(unsigned int ThreadId);
|
||||
void on_deleteSettingUi(void *hEvent);
|
||||
void on_deleteProgressUi(void *hEvent);
|
||||
void on_deleteMessageBoxUi(void *hEvent);
|
||||
|
||||
public:
|
||||
QTranslator m_translator;
|
||||
|
|
Loading…
Reference in New Issue