社内サービスのストレステストを行うために、マルチスレッドのWTLutilを作成しました。
通信スレッドは、終了したことをメインスレッドに通知するため、メインスレッドは対応するオブジェクトを削除できます。
彼らはそのように信号を出します:
PostThreadMessage(m_dwParentThreadId, WM_THREADQUIT, 1, m_dwNetThreadId);
私の問題は、私が定義したカスタムメッセージをどのように処理するかです。
WM_THREADQUIT is #define'd as WM_USER + 10
メッセージマップのエントリを使用してハンドラーを呼び出したいと思いました。例:
BEGIN_MSG_MAP(CMainDlg)
MESSAGE_HANDLER( WM_INITDIALOG, OnInitDialog )
MESSAGE_HANDLER( WM_THREADQUIT, OnThreadQuit )
...
REFLECT_NOTIFICATIONS()
END_MSG_MAP()
ただし、OnThreadQuitが呼び出されることはありません。
私がそれを処理できる唯一の方法は、PreTranslateMessageでハンドラーを明示的に呼び出すことです。
virtual BOOL CMainDlg::PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_THREADQUIT )
{
BOOL blHandled;
OnThreadQuit(pMsg->message, pMsg->wParam, pMsg->lParam, blHandled);
return TRUE;
}
return CWindow::IsDialogMessage(pMsg);
}
これは正しい方法ではないと確信しています...
私は正しい方法を知りたいです-誰かが助けることができます!?