掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
スレッドからのメッセージについて。 (ID:56805)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 今回ワーカースレッドにDlgのポインタを渡して、「SendMessage(*objDlg, WM_TESTMSG, 0, 0)」としました。仮に*objDlgと取ってしまうと、 不正な・・・のエラーが出ます。 この場合、SendMessage に渡しているのは何でしょうか? objDlg がポインタならば、*objDlg は CTestDlg の実体ですね。 SendMessage の第一引数は HWND で、CTestDlg を渡すことは出来ませんが、CWindow に定義されている、operator HWND() によって、自動的に HWND にキャストされて、実際にはウィンドウハンドルが渡されています。 ATL ではどうだか知りませんが、MFC では、CWnd などのオブジェクトは、その情報をスレッドごとに固有の TLS という領域に保持しています。 このため、CWnd オブジェクト自体を別のスレッドに渡すと、渡された先のスレッドの TLS の内容は、そのオブジェクトが意図していたものとは違いますから、エラーが出てしまいます。 このため、CWnd オブジェクトを他のスレッドに渡す際には、HWND を渡すことが義務付けられています。 ATL でも、これは同じことなんでしょうかね。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.