diff --git a/ECTrainer2/BaseProcess.cpp b/ECTrainer2/BaseProcess.cpp index 30cdb3d..ffbfab4 100644 --- a/ECTrainer2/BaseProcess.cpp +++ b/ECTrainer2/BaseProcess.cpp @@ -27,12 +27,8 @@ if (_threadID == 0) _threadID = ::GetCurrentThreadId(); // ���C���X���b�hID�擾 mwut::DebugPrintf(_T("Thread %d start\n"), _threadID); - // ���b�Z�[�W�L���[�̍쐬 + // ���b�Z�[�W���[�v MSG msg; - ::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE); - _messageQueReady = true; - - // ���[�v while (1) { if (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { if (!::GetMessage(&msg, NULL, 0, 0)) break; @@ -40,6 +36,7 @@ } else { if (!this->Routine()) break; } + _messageQueReady = true; } return true; } @@ -52,8 +49,7 @@ // ���b�Z�[�W���� bool BaseProcess::EventProc(MSG &msg) { - mwut::DebugPrintf(_T("Receive Th %d msg %d\n"), _threadID, msg.message); - + mwut::DebugPrintf(_T("BaseProcess::EventProc Thread %d msg %d\n"), _threadID, msg.message); return true; } @@ -71,8 +67,8 @@ return rv; } -// ���b�Z�[�W�𑗂� -bool BaseProcess::Tell(ECTMSG msg, WPARAM wp, LPARAM lp) { +// ���b�Z�[�W�𑗂�i�񓯊��j +bool BaseProcess::PostMsg(ECTMSG msg, WPARAM wp, LPARAM lp) { if (!_messageQueReady || !_threadID) return false; // ���b�Z�[�W�L���[�̏����m�F ::PostThreadMessage(_threadID, (int)msg, wp, lp); return true; diff --git a/ECTrainer2/BaseProcess.h b/ECTrainer2/BaseProcess.h index c9b07df..6e1e48f 100644 --- a/ECTrainer2/BaseProcess.h +++ b/ECTrainer2/BaseProcess.h @@ -29,10 +29,10 @@ virtual bool Launch(); // ������ virtual bool Init(); - // �X���b�h�{�́iprotected, ��virtual) + // �X���b�h�{�� virtual bool MainLoop(); - // �X���b�h�I���҂� + // �X���b�h�I���҂��@����I���Ńn���h���‚��� virtual bool WaitForExit(DWORD timeOut = 3000); - // ���b�Z�[�W�𑗂� - virtual bool Tell(ECTMSG msg, WPARAM wp = 0, LPARAM lp = 0); + // ���b�Z�[�W�𑗂�i�񓯊��j + virtual bool PostMsg(ECTMSG msg, WPARAM wp = 0, LPARAM lp = 0); }; diff --git a/ECTrainer2/ECTrainer.cpp b/ECTrainer2/ECTrainer.cpp index b1895b8..2c3fd26 100644 --- a/ECTrainer2/ECTrainer.cpp +++ b/ECTrainer2/ECTrainer.cpp @@ -60,7 +60,7 @@ // �A�v���P�[�V�������~ void ECTrainer::StopApp() { - for (int i = 0; i < (int)PROC::NUM; i++) _pProcs[i]->Tell(ECTMSG::QUIT); + for (int i = 0; i < (int)PROC::NUM; i++) _pProcs[i]->PostMsg(ECTMSG::QUIT); } // ���b�Z�[�W�{�b�N�X�\�� diff --git a/ECTrainer2/ECTrainerGUI.cpp b/ECTrainer2/ECTrainerGUI.cpp index b1a6c0b..e7b7261 100644 --- a/ECTrainer2/ECTrainerGUI.cpp +++ b/ECTrainer2/ECTrainerGUI.cpp @@ -90,16 +90,16 @@ switch (_pEct->PWorker()->GetAppStatus()) { case APP_STATUS::IDLE: if (cvui::button(140, 30, "CALIBRATION")) { - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::CALIB_START); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::CALIB_START); } if (cvui::button(140, 30, "START")) { - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::EXP_START); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::EXP_START); } break; case APP_STATUS::STIM: if (cvui::button(140, 30, "STOP")) { _dsm->StopMovie(); - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::EXP_STOP); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::EXP_STOP); } //cvui::trackbar(140, &targetSize, (float)0, (float)3.0); //cvui::checkbox("Show Eyes", &fShowEyesPos); @@ -116,7 +116,7 @@ } bool snapshot = cvui::button(140, 30, "SNAPSHOT"); if (cvui::button(140, 30, "QUIT")) { - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::SOFTWARE_END); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::SOFTWARE_END); } if (_pEct->PBitalMonitor()->IsUseDevice()) { cvui::printf("HeartBeat (bpm)"); @@ -141,19 +141,19 @@ if (movie.size() < 1 || movie == L"STOP") { _dsm->StopMovie(); mwut::DebugPrintf(_T("ECTMSG::MOVIE_STOP [%s]\n"), movie.c_str()); - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::MOVIE_STOP); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::MOVIE_STOP); } else { if (_dsm->PlayMovie(movie)) { - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::MOVIE_START); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::MOVIE_START); } else { _dsm->StopMovie(); - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::MOVIE_ERROR); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::MOVIE_ERROR); } } } // ����̖����܂ōĐ��`�F�b�N if (_dsm->IsReachToEnd()) { - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::MOVIE_END); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::MOVIE_END); } // ��ʕ\�� @@ -175,7 +175,7 @@ case '8': PlaySound(_T("../voices/Excellent_L.wav"), NULL, SND_FILENAME | SND_ASYNC); break; } if (key == KEY_ESC || cv::getWindowProperty(WIN_MAIN, 0) < 0) { - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::SOFTWARE_END); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::SOFTWARE_END); } return true; diff --git a/ECTrainer2/GOpenCV.cpp b/ECTrainer2/GOpenCV.cpp index 8d79511..286b1eb 100644 --- a/ECTrainer2/GOpenCV.cpp +++ b/ECTrainer2/GOpenCV.cpp @@ -1,7 +1,26 @@ #include "GOpenCV.h" +#include namespace gocv { +// �҂��Ȃ�waitKey() +int noWaitKey() { + MSG msg; + while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { + if (::GetMessage(&msg, NULL, 0, 0) == 0) { + // WM_QUIT + ::PostQuitMessage(msg.wParam); + return 0; + } + + if (msg.message == WM_CHAR) return (int)msg.wParam; + + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + return -1; +} + // �����摜���c���ɘA���\�� void imShowMulti( cv::String winname, std::vector& imgs, // �S�Ă̕\���摜�i8bit 3ch or 8bit 1ch�̂�) diff --git a/ECTrainer2/GOpenCV.h b/ECTrainer2/GOpenCV.h index dcc4f00..860052e 100644 --- a/ECTrainer2/GOpenCV.h +++ b/ECTrainer2/GOpenCV.h @@ -102,10 +102,13 @@ //using namespace cv; -#include namespace gocv { +// �҂��Ȃ�waitKey() +// �߂�l�F���̓L�[�R�[�h�C�L�[���͂Ȃ� -1�CWM_QUIT��M 0 +int noWaitKey(); + // �����摜���c���ɘA���\�� void imShowMulti( cv::String winname, std::vector& imgs, // �S�Ă̕\���摜�i8bit 3ch or 8bit 1ch�̂�) diff --git a/ECTrainer2/Stimulus.cpp b/ECTrainer2/Stimulus.cpp index 3610f30..04d9adc 100644 --- a/ECTrainer2/Stimulus.cpp +++ b/ECTrainer2/Stimulus.cpp @@ -76,9 +76,9 @@ } if (_StimNo + 1 < (int)_StimInfoSet.size()) { SetStimulus(_StimNo + 1); - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::EXP_NEXT); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::EXP_NEXT); } else { - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::EXP_END); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::EXP_END); } return true; } diff --git a/ECTrainer2/TobiiREST.cpp b/ECTrainer2/TobiiREST.cpp index b44e0db..78a028f 100644 --- a/ECTrainer2/TobiiREST.cpp +++ b/ECTrainer2/TobiiREST.cpp @@ -113,10 +113,10 @@ std::wstring status = _T("calibrated"); #endif if (status == _T("failed")) { - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::CALIB_FAILED); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::CALIB_FAILED); mwut::DebugPrintf(_T("Calibration failed\n")); } else { - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::CALIB_OK); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::CALIB_OK); mwut::DebugPrintf(_T("Calibration successful\n")); } return true; @@ -124,7 +124,7 @@ catch (const std::exception & e) { UNREFERENCED_PARAMETER(e); // e.what() ���}���`�o�C�g������Ȃ̂Ŏg���Ȃ� - ((BaseProcess*)_pEct->PWorker())->Tell(ECTMSG::CALIB_ERR); + ((BaseProcess*)_pEct->PWorker())->PostMsg(ECTMSG::CALIB_ERR); mwut::DebugPrintf(_T("Error in TobiiREST::QueryCalibResult()\n")); return false; } diff --git a/ECTrainer2/Worker.cpp b/ECTrainer2/Worker.cpp index 237a49c..bc7cda5 100644 --- a/ECTrainer2/Worker.cpp +++ b/ECTrainer2/Worker.cpp @@ -88,7 +88,7 @@ } else { if (_pContactTimer->Elapse() > 3000.) { fb = 1; - this->Tell(ECTMSG::FB_GOOD); + this->PostMsg(ECTMSG::FB_GOOD); _pContactTimer->Reset(); } } @@ -140,29 +140,29 @@ case (int)ECTMSG::CALIB_START: // �L�����u���[�V�����J�n if (_AppStatus == APP_STATUS::IDLE) { _AppStatus = APP_STATUS::CALIB; - ((BaseProcess*)_pEct->PStimulus())->Tell(ECTMSG::CALIB_START); - ((BaseProcess*)_pEct->PTobiiREST())->Tell(ECTMSG::CALIB_START); + ((BaseProcess*)_pEct->PStimulus())->PostMsg(ECTMSG::CALIB_START); + ((BaseProcess*)_pEct->PTobiiREST())->PostMsg(ECTMSG::CALIB_START); this->EventLog(_T("Calibration Start")); } break; case (int)ECTMSG::CALIB_OK: // �L�����u���[�V�������� _AppStatus = APP_STATUS::IDLE; - ((BaseProcess*)_pEct->PStimulus())->Tell(ECTMSG::CALIB_OK); + ((BaseProcess*)_pEct->PStimulus())->PostMsg(ECTMSG::CALIB_OK); this->EventLog(_T("Calibration Success")); break; case (int)ECTMSG::CALIB_FAILED: // �L�����u���[�V�������s case (int)ECTMSG::CALIB_ERR: // �L�����u���[�V�����G���[ _AppStatus = APP_STATUS::IDLE; - ((BaseProcess*)_pEct->PStimulus())->Tell(ECTMSG::CALIB_FAILED); + ((BaseProcess*)_pEct->PStimulus())->PostMsg(ECTMSG::CALIB_FAILED); this->EventLog(_T("Calibration Failed")); break; case (int)ECTMSG::EXP_START: // �����J�n if (_AppStatus == APP_STATUS::IDLE) { _AppStatus = APP_STATUS::STIM; - ((BaseProcess*)_pEct->PStimulus())->Tell(ECTMSG::EXP_START); + ((BaseProcess*)_pEct->PStimulus())->PostMsg(ECTMSG::EXP_START); this->EventLog(_T("Experiment Start")); _pExpTimer->Reset(); _pContactTimer->Reset(); @@ -172,7 +172,7 @@ case (int)ECTMSG::EXP_STOP: // ������~ if (_AppStatus == APP_STATUS::STIM) { _AppStatus = APP_STATUS::IDLE; - ((BaseProcess*)_pEct->PStimulus())->Tell(ECTMSG::EXP_STOP); + ((BaseProcess*)_pEct->PStimulus())->PostMsg(ECTMSG::EXP_STOP); this->EventLog(_T("Experiment Stopped")); } break; @@ -180,7 +180,7 @@ case (int)ECTMSG::EXP_END: // �����I�� if (_AppStatus == APP_STATUS::STIM) { _AppStatus = APP_STATUS::IDLE; - ((BaseProcess*)_pEct->PStimulus())->Tell(ECTMSG::EXP_STOP); + ((BaseProcess*)_pEct->PStimulus())->PostMsg(ECTMSG::EXP_STOP); this->EventLog(_T("Experiment Finished")); } break; @@ -199,7 +199,7 @@ case (int)ECTMSG::MOVIE_END: // ����Đ��I�� this->EventLog(_T("Movie End")); - ((BaseProcess*)_pEct->PStimulus())->Tell(ECTMSG::MOVIE_END); + ((BaseProcess*)_pEct->PStimulus())->PostMsg(ECTMSG::MOVIE_END); break; case (int)ECTMSG::MOVIE_ERROR: // ����G���[