トップページ > 過去ログ > 記事閲覧
マルチスレッド時のダイアログ
名前:だんごさん 日時: 2013/05/13 00:09

C言語でDXライブラリのプログラムを組んでいます。 今作っているソフトは、DxLibがメッセージ処理してくれるProcessMessage()以外で動くように、マルチスレッドにしています。 理由はソフトのタイトルバーがシステムに掴まれても画面が動くようにするためです。 またモードレスダイアログを表示させるため、ダイアログメッセージ処理を肩代わりしてくれるSetDialogBoxHandle( hwnd ); を呼び出していました。 しかし、DxLibでマルチスレッドにするための関数SetMultiThreadFlag( TRUE ) ; を呼び出すと上記の関数が無効(?)になります。 使えないようにコメントアウトしてしまうのです。 そこでダイアログメッセージ処理も自分で作ろうと思ったですが、DxLib側のプログラムで呼び出すと処理が重くなります。また別のスレッドを作ろうとしたのですが、プログラムを通ってくれません(書き方が違うんだと思いますが…)。 どうすればDxLibのマルチスレッドにさらにモードレスダイアログのメッセージ処理を追加できるでしょうか? Http://dixq.net/forum/viewtopic.php?f=3&t=13052 windows 7 HP VC++2008 DxLib 3.10a

Page: 1 |

Re: マルチスレッド時のダイアログ ( No.1 )
名前:だんごさん 日時:2013/05/16 19:37

すみません、質問の大半は自己解決しました。 SetDialogBoxHandle( hwnd );をProcessMessage側で処理させてなかったのが原因です。 一応フリーズせずにダイアログを立ち上げることができましたが、初期化されない状態になっています。 (初期化とは、ラジオボタンやテキストをセットしたりすることの意味です) デバッグしてみたところ、初期化の処理はプログラムが走っているのに反映されていないということが分かりました。 一応報告までです。
Re: マルチスレッド時のダイアログ ( No.2 )
名前:だんごさん(解決) 日時:2013/05/19 08:53

全て自己解決しました。 主な原因として、HWND型の引数の渡し方が誤っていたことでした。 無事、動作したことを確認いたしましたので解決とさせていただきます。

Page: 1 |