0

私は今、奇妙な問題に遭遇しました。状況は次のとおりです。

メイン スレッドは、メイン ウィンドウをホストします。

メイン スレッドが子ウィンドウを作成します。

メインスレッドは子スレッドを作成します。

子スレッドは IE コントロールを作成します。

子スレッドは、IE Con​​trol を子ウィンドウにアタッチします。

問題は、子スレッドがブロックされると (例: ::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);
        }
    }
}

誰かが私を助けてくれますか?

4

2 に答える 2

0

その理由は、親ウィンドウが、別のスレッドによってホストされている子ウィンドウとメッセージを同期する必要があるためです。したがって、2 つのスレッドには何らかの関連性があります。1 つがブロックされ、もう 1 つもブロックされています。

于 2013-07-29T02:00:46.353 に答える