• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WINAPIのスレッドについて教えてください)

WINAPIのスレッドについて教えてください

このQ&Aのポイント
  • WINAPIのスレッドを使用して写真のスライドショウを作成する際、正しいウィンドウサイズを取得できない問題が発生しています。
  • デバッグ時に表示されない変数についても教えてください。
  • 環境はMicrosoft Visual C++ 2008 Express Editionです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

>Cランタイムライブラリの意味を理解してないです。 scanf()やprintf()等です。 が、GUIなのでscanf()やprintf()は無意味でしょう。 strtok()を使用していたりすると、マルチスレッドで問題が発生する場合もありますが。 CreateThread()の代わりに_beginthreadex()を使用して下さい。 >dataはstaticな変数です。 >調べましたが、dataもSlidDataも同じアドレスでした。 であるとすると…少々不明です。 ちなみに、期待している本来の値ってどうなるのでしょう?

scanfprintf
質問者

お礼

お答えいただきありがとうございました。 申し訳ありません・・・ デバック時にrcの値を調べると不正確なものでしたが、 MessageBoxに表示すると正確な値でした。 バグなのでしょうか? ちなみに質問文の下部のデバック時に表示されない変数についてはご存知でしょうか?

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>どうもThread関数に構造体dataを渡すと値が変わってしまうようです。 ・DataParam構造体型のdataは間違いなくstatic変数ですか? ・スレッド起動前のDataParam構造体型のdataのアドレスと、SlidThread()内のSlidDataが指しているアドレスは間違いなく同じですか? ・Cランタイムライブラリを使っている場合はCreateThread()では問題になる場合がありますが、ソコは大丈夫ですか?

scanfprintf
質問者

お礼

dataはstaticな変数です。 調べましたが、dataもSlidDataも同じアドレスでした。 Cランタイムライブラリは使用していません。 dataの中でも他の変数の値は問題無いですし、 InvalidateRect(SlidData->hWnd,NULL,TRUE)で行えるので、 SlidData->hWndの値自体は間違っていないと思うんですが???

scanfprintf
質問者

補足

申し訳ないです。 使用してないと書いてしまいましたが、 Cランタイムライブラリの意味を理解してないです。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

・WndProc()内でdata.hWnd(およびdata自体)を書き換えている箇所はありませんか? ・SlidThread()内でSlidData->hWnd(および*SlidData自体)を書き換えている箇所はありませんか? ・GetClientRect()の戻り値はどうなっていますか?エラーだった場合GetLastError()はなんと言っていますか?

scanfprintf
質問者

お礼

ありがとうございます。 data.hWndもSlidData->hWndも変更しておりません。 GetClientRectもエラーではありませんでした。 試しにParamData構造体にRECT型のrcを作成して、 CreateThreadの直前でdata.hWndのサイズを格納すると、 ここでは問題ありませんでしたが、Thread関数内ですぐに SlidData.rcを調べるとやはり値は変更されていました。 どうもThread関数に構造体dataを渡すと値が変わってしまうようです。 どこが間違っているのでしょうか?

関連するQ&A