ページ 11

マルチスレッドについて

Posted: 2008年11月18日(火) 09:51
by dic
またまた質問させてもらいます
ゲームにおいてマルチスレッドで処理を行いたいのですが
各パーツをマルチスレッドで描画すると描画する順番どおりに
スレッドを実行させたいのですが、
そういった方法はあるのでしょうか?

OS:WindowsXP
C/C++ WINAPI関数 CreateThreadです

Re:マルチスレッドについて

Posted: 2008年11月18日(火) 10:09
by 御津凪
> 各パーツをマルチスレッドで描画すると描画する順番どおりに
> スレッドを実行させたいのですが、

とありますが、並列処理上で描画命令が出された時でしょうか?
それとも、描画処理に優先順位をつけて描画するのでしょうか?

どちらの方法でも、基本は描画処理中に別のスレッドが描画処理をしてはいけません。
(DirectXでマルチスレッド用デバイスを作成しない場合など)
この場合、排他的処理を行うためのクリティカルセクションが必要です。

前者の場合は上記のようにクリティカルセクション内で描画を行うようにするだけです。

後者の場合、描画処理とその順序をリストなどに格納しておいて、毎フレームの最後に
一度に描画する構造を構築すると良いでしょう。
(スプライトクラスを使った描画リストとかを使うと楽かも)

Re:マルチスレッドについて

Posted: 2008年11月18日(火) 10:13
by Mist
> 各パーツをマルチスレッドで描画すると描画する順番どおりに
> スレッドを実行させたいのですが、
> そういった方法はあるのでしょうか?

どういった目的でマルチスレッドにしたいのか良くわかりませんが
順番どおりに実行させるのであれば、そもそもマルチスレッドにする意味がないです。
(DXライブラリを使用している場合は特に)
描画を行うところはひとつのスレッドに絞ったほうがいいと思います。

Re:マルチスレッドについて

Posted: 2008年11月18日(火) 10:48
by dic
>御津凪さん
クリティカルセクションを使った方法は私の勉強不足で今回は見送らせてもらいます
後者のリストを作り毎フレームの最後に描画する処理にします

>Mistさん
目的はCPUの利用の効率化です
現在のソースでは while を使ってフレームレートの調整を行っているので
CPU利用率が100%になってしまうためです

ご回答ありがとうございました