diff --git a/modules/twainui/Manager.cpp b/modules/twainui/Manager.cpp index c8f76591..c0b1d6f2 100644 --- a/modules/twainui/Manager.cpp +++ b/modules/twainui/Manager.cpp @@ -23,17 +23,17 @@ Manager::Manager() qRegisterMetaType("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& 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 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) { } diff --git a/modules/twainui/Manager.h b/modules/twainui/Manager.h index 78073f41..37abd2c0 100644 --- a/modules/twainui/Manager.h +++ b/modules/twainui/Manager.h @@ -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;