私は今、奇妙な問題に遭遇しました。状況は次のとおりです。
メイン スレッドは、メイン ウィンドウをホストします。
メイン スレッドが子ウィンドウを作成します。
メインスレッドは子スレッドを作成します。
子スレッドは IE コントロールを作成します。
子スレッドは、IE Control を子ウィンドウにアタッチします。
問題は、子スレッドがブロックされると (例: ::Sleep(10 * 1000)、メイン スレッドの GetMessage 関数がメッセージを取得できなくなることです。これは、メイン スレッドもブロックされていることを意味します! わかりません。なぜサブスレッドなのかメイン スレッドに影響を与えることができますか? attc コードにコメントを付けると、子スレッドのブロックはメイン スレッドをまったくブロックしません!
以下は、添付コードのスニペットです。
CComPtr<IUnknown> punkCtrl;
HRESULT hr = CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&punkCtrl);
if( SUCCEEDED(hr) )
{
m_spWebBrowser2 = punkCtrl;
if( m_spWebBrowser2 )
{
CComPtr<IAxWinHostWindow> spWinHost;
HRESULT hr = QueryHost(&spWinHost);
if (spWinHost)
{
spWinHost->AttachControl(m_spWebBrowser2,m_hWnd);
}
}
}
誰かが私を助けてくれますか?